Merge remote-tracking branch 'origin/enhancement-rfsim' into develop_integration_2018_w29
Conflicts: openair2/LAYER2/MAC/eNB_scheduler_primitives.c openair2/UTIL/LOG/log.c targets/RT/USER/lte-uesoftmodem.c targets/SIMU/USER/oaisim.c targets/SIMU/USER/oaisim_functions.c
This commit is contained in:
+11
-100
@@ -621,9 +621,7 @@ 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(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 "useless ??? Must be True to compile nasmesh driver without rtai ????")
|
||||
add_boolean_option(OAISIM False "specific to oaisim")
|
||||
add_boolean_option(OAI_NW_DRIVER_USE_NETLINK True "????")
|
||||
|
||||
add_boolean_option(USE_MME False "this flag is used only one time in lte-softmodem.c")
|
||||
@@ -656,9 +654,7 @@ add_boolean_option(OPENAIR_LTE True "Seems legacy: keep it to true")
|
||||
# PHY options
|
||||
##########################
|
||||
add_boolean_option(DRIVER2013 True "only relevant for EXMIMO")
|
||||
add_boolean_option(ENABLE_NEW_MULTICAST False "specific to oaisim")
|
||||
add_boolean_option(EXMIMO_IOT True "????")
|
||||
add_boolean_option(LARGE_SCALE False "specific to oaisim: defines max eNB=2 and max UE=120")
|
||||
add_boolean_option(LOCALIZATION False "???")
|
||||
add_integer_option(MAX_NUM_CCs 1 "????")
|
||||
add_boolean_option(MU_RECEIVER False "????")
|
||||
@@ -681,7 +677,6 @@ add_boolean_option(NAS_UE True "NAS UE INSTANCE (<> NAS_MME)")
|
||||
##########################
|
||||
# ACCESS STRATUM LAYER2 OPTIONS
|
||||
##########################
|
||||
add_boolean_option(MAC_CONTEXT True "specific to oaisim")
|
||||
add_boolean_option(JUMBO_FRAME True "ENABLE LARGE SDU in ACCESS STRATUM (larger than common MTU)")
|
||||
|
||||
##########################
|
||||
@@ -1725,12 +1720,14 @@ ${OPENAIR1_DIR}/SIMULATION/TOOLS/taus.c
|
||||
${OPENAIR1_DIR}/SIMULATION/TOOLS/multipath_channel.c
|
||||
${OPENAIR1_DIR}/SIMULATION/TOOLS/multipath_tv_channel.c
|
||||
${OPENAIR1_DIR}/SIMULATION/TOOLS/abstraction.c
|
||||
${OPENAIR1_DIR}/SIMULATION/TOOLS/channel_sim.c
|
||||
${OPENAIR1_DIR}/SIMULATION/RF/rf.c
|
||||
${OPENAIR1_DIR}/SIMULATION/RF/dac.c
|
||||
${OPENAIR1_DIR}/SIMULATION/RF/adc.c
|
||||
${OPENAIR1_DIR}/SIMULATION/ETH_TRANSPORT/netlink_init.c
|
||||
)
|
||||
|
||||
|
||||
add_library(SIMU_ETH
|
||||
${OPENAIR1_DIR}/SIMULATION/ETH_TRANSPORT/netlink_init.c
|
||||
${OPENAIR1_DIR}/SIMULATION/ETH_TRANSPORT/multicast_link.c
|
||||
@@ -1987,6 +1984,8 @@ add_executable(lte-uesoftmodem
|
||||
${OPENAIR_TARGETS}/RT/USER/rt_wrapper.c
|
||||
${OPENAIR_TARGETS}/RT/USER/lte-ue.c
|
||||
${OPENAIR_TARGETS}/RT/USER/lte-uesoftmodem.c
|
||||
${OPENAIR_TARGETS}/RT/USER/lte-ru.c
|
||||
${OPENAIR_TARGETS}/RT/USER/rfsim.c
|
||||
${OPENAIR1_DIR}/SIMULATION/TOOLS/taus.c
|
||||
${OPENAIR_TARGETS}/COMMON/create_tasks_ue.c
|
||||
${OPENAIR_TARGETS}/ARCH/COMMON/common_lib.c
|
||||
@@ -2005,13 +2004,13 @@ add_executable(lte-uesoftmodem
|
||||
|
||||
target_link_libraries (lte-uesoftmodem
|
||||
-Wl,--start-group
|
||||
RRC_LIB S1AP_LIB S1AP_ENB GTPV1U SECU_CN SECU_OSA UTIL HASHTABLE SCTP_CLIENT UDP SCHED_RU_LIB SCHED_UE_LIB PHY_COMMON PHY_UE PHY_RU LFDS L2_UE
|
||||
RRC_LIB S1AP_LIB S1AP_ENB GTPV1U SECU_CN SECU_OSA UTIL HASHTABLE SCTP_CLIENT UDP SCHED_RU_LIB SCHED_UE_LIB PHY_COMMON PHY_UE PHY_RU LFDS L2_UE SIMU
|
||||
${MSC_LIB} ${RAL_LIB} ${NAS_UE_LIB} ${ITTI_LIB} ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} LFDS7
|
||||
NFAPI_COMMON_LIB NFAPI_LIB NFAPI_PNF_LIB NFAPI_USER_LIB
|
||||
-Wl,--end-group z dl)
|
||||
|
||||
target_link_libraries (lte-uesoftmodem ${LIBXML2_LIBRARIES})
|
||||
target_link_libraries (lte-uesoftmodem pthread m ${CONFIG_LIBRARIES} rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} sctp ${XFORMS_LIBRARIES} ${PROTOBUF_LIB} ${CMAKE_DL_LIBS} ${LIBYAML_LIBRARIES})
|
||||
target_link_libraries (lte-uesoftmodem pthread m ${CONFIG_LIBRARIES} rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} sctp ${XFORMS_LIBRARIES} ${PROTOBUF_LIB} ${CMAKE_DL_LIBS} ${LIBYAML_LIBRARIES} ${ATLAS_LIBRARIES})
|
||||
target_link_libraries (lte-uesoftmodem ${LIB_LMS_LIBRARIES})
|
||||
target_link_libraries (lte-uesoftmodem ${T_LIB})
|
||||
|
||||
@@ -2024,6 +2023,8 @@ add_executable(lte-uesoftmodem-nos1
|
||||
${OPENAIR_TARGETS}/RT/USER/rt_wrapper.c
|
||||
${OPENAIR_TARGETS}/RT/USER/lte-ue.c
|
||||
${OPENAIR_TARGETS}/RT/USER/lte-uesoftmodem.c
|
||||
${OPENAIR_TARGETS}/RT/USER/lte-ru.c
|
||||
${OPENAIR_TARGETS}/RT/USER/rfsim.c
|
||||
${OPENAIR1_DIR}/SIMULATION/TOOLS/taus.c
|
||||
${OPENAIR_TARGETS}/COMMON/create_tasks_ue.c
|
||||
${OPENAIR_TARGETS}/ARCH/COMMON/common_lib.c
|
||||
@@ -2043,13 +2044,13 @@ add_executable(lte-uesoftmodem-nos1
|
||||
|
||||
target_link_libraries (lte-uesoftmodem-nos1
|
||||
-Wl,--start-group
|
||||
RRC_LIB SECU_CN SECU_OSA UTIL HASHTABLE SCHED_RU_LIB SCHED_UE_LIB PHY_COMMON PHY_UE PHY_RU LFDS L2_UE ${MSC_LIB} ${RAL_LIB} ${ITTI_LIB}
|
||||
RRC_LIB SECU_CN SECU_OSA UTIL HASHTABLE SCHED_RU_LIB SCHED_UE_LIB PHY_COMMON PHY_UE PHY_RU LFDS L2_UE SIMU ${MSC_LIB} ${RAL_LIB} ${ITTI_LIB}
|
||||
${MIH_LIB} ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} LFDS7
|
||||
NFAPI_COMMON_LIB NFAPI_LIB NFAPI_PNF_LIB NFAPI_USER_LIB
|
||||
-Wl,--end-group z dl )
|
||||
|
||||
target_link_libraries (lte-uesoftmodem-nos1 ${LIBXML2_LIBRARIES})
|
||||
target_link_libraries (lte-uesoftmodem-nos1 pthread m ${CONFIG_LIBRARIES} rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} sctp ${XFORMS_LIBRARIES} ${PROTOBUF_LIB} ${CMAKE_DL_LIBS} ${LIBYAML_LIBRARIES})
|
||||
target_link_libraries (lte-uesoftmodem-nos1 pthread m ${CONFIG_LIBRARIES} rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} sctp ${XFORMS_LIBRARIES} ${PROTOBUF_LIB} ${CMAKE_DL_LIBS} ${LIBYAML_LIBRARIES} ${ATLAS_LIBRARIES})
|
||||
target_link_libraries (lte-uesoftmodem-nos1 ${LIB_LMS_LIBRARIES})
|
||||
target_link_libraries (lte-uesoftmodem-nos1 ${T_LIB})
|
||||
|
||||
@@ -2080,96 +2081,6 @@ target_link_libraries (lte-uesoftmodem-nos1 ${T_LIB})
|
||||
# Addexecutables for tests
|
||||
####################################
|
||||
|
||||
# A all in one network simulator
|
||||
################
|
||||
add_executable(oaisim
|
||||
${rrc_h}
|
||||
${s1ap_h}
|
||||
${x2ap_h}
|
||||
${OPENAIR_BIN_DIR}/messages_xml.h
|
||||
${OPENAIR_TARGETS}/RT/USER/lte-ue.c
|
||||
${OPENAIR_TARGETS}/RT/USER/lte-ru.c
|
||||
${OPENAIR_TARGETS}/RT/USER/rt_wrapper.c
|
||||
${OPENAIR_TARGETS}/SIMU/USER/channel_sim.c
|
||||
# ${OPENAIR_TARGETS}/SIMU/USER/oaisim_config.c
|
||||
${OPENAIR_TARGETS}/SIMU/USER/sinr_sim.c
|
||||
${OPENAIR_TARGETS}/SIMU/USER/cor_SF_sim.c
|
||||
${OPENAIR_TARGETS}/SIMU/USER/oaisim_functions.c
|
||||
${OPENAIR_TARGETS}/SIMU/USER/event_handler.c
|
||||
${OPENAIR_TARGETS}/SIMU/USER/oaisim.c
|
||||
${OPENAIR_TARGETS}/ARCH/COMMON/common_lib.c
|
||||
${OPENAIR2_DIR}/RRC/NAS/nas_config.c
|
||||
${OPENAIR2_DIR}/RRC/NAS/rb_config.c
|
||||
${OPENAIR3_DIR}/NAS/UE/nas_ue_task.c
|
||||
${OPENAIR_DIR}/common/utils/utils.c
|
||||
${OPENAIR_DIR}/common/utils/system.c
|
||||
${OPENAIR_TARGETS}/COMMON/create_tasks_ue.c
|
||||
${XFORMS_SOURCE}
|
||||
${T_SOURCE}
|
||||
${CONFIG_SOURCES}
|
||||
${SHLIB_LOADER_SOURCES}
|
||||
)
|
||||
|
||||
|
||||
target_include_directories(oaisim PUBLIC ${OPENAIR_TARGETS}/SIMU/USER)
|
||||
target_link_libraries (oaisim
|
||||
-Wl,-ldl,--start-group
|
||||
RRC_LIB S1AP_LIB S1AP_ENB X2AP_LIB SECU_CN UTIL HASHTABLE SCTP_CLIENT UDP SCHED_RU_LIB SCHED_UE_LIB PHY_COMMON PHY_UE PHY_RU LFDS L2_UE ${MSC_LIB} LIB_NAS_UE SIMU SECU_OSA ${ITTI_LIB} ${MIH_LIB}
|
||||
${FLPT_MSG_LIB} ${ASYNC_IF_LIB} ${FLEXRAN_AGENT_LIB} LFDS7
|
||||
-Wl,--end-group z dl)
|
||||
|
||||
target_link_libraries (oaisim ${LIBXML2_LIBRARIES} ${LAPACK_LIBRARIES})
|
||||
target_link_libraries (oaisim pthread m ${CONFIG_LIBRARIES} rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} sctp z
|
||||
${ATLAS_LIBRARIES} ${XFORMS_LIBRARIES} ${OPENPGM_LIBRARIES} ${PROTOBUF_LIB} ${CMAKE_DL_LIBS} ${LIBYAML_LIBRARIES})
|
||||
#Force link with forms, regardless XFORMS option
|
||||
target_link_libraries (oaisim forms)
|
||||
target_link_libraries (oaisim ${T_LIB})
|
||||
|
||||
|
||||
# A all in one network simulator
|
||||
################
|
||||
add_executable(oaisim_nos1
|
||||
${rrc_h}
|
||||
${s1ap_h}
|
||||
${x2ap_h}
|
||||
${OPENAIR_BIN_DIR}/messages_xml.h
|
||||
${OPENAIR_TARGETS}/RT/USER/lte-ue.c
|
||||
${OPENAIR_TARGETS}/RT/USER/lte-ru.c
|
||||
${OPENAIR1_DIR}/SCHED/prach_procedures.c
|
||||
${OPENAIR_TARGETS}/RT/USER/rt_wrapper.c
|
||||
${OPENAIR_TARGETS}/SIMU/USER/channel_sim.c
|
||||
# ${OPENAIR_TARGETS}/SIMU/USER/oaisim_config.c
|
||||
${OPENAIR_TARGETS}/SIMU/USER/sinr_sim.c
|
||||
${OPENAIR_TARGETS}/SIMU/USER/cor_SF_sim.c
|
||||
${OPENAIR_TARGETS}/SIMU/USER/oaisim_functions.c
|
||||
${OPENAIR_TARGETS}/SIMU/USER/event_handler.c
|
||||
${OPENAIR_TARGETS}/SIMU/USER/oaisim.c
|
||||
${OPENAIR_TARGETS}/ARCH/COMMON/common_lib.c
|
||||
${OPENAIR2_DIR}/RRC/NAS/nas_config.c
|
||||
${OPENAIR2_DIR}/RRC/NAS/rb_config.c
|
||||
${OPENAIR_TARGETS}/COMMON/create_tasks_ue.c
|
||||
${OPENAIR_DIR}/common/utils/system.c
|
||||
${XFORMS_SOURCE}
|
||||
${T_SOURCE}
|
||||
${CONFIG_SOURCES}
|
||||
${SHLIB_LOADER_SOURCES}
|
||||
)
|
||||
target_include_directories(oaisim_nos1 PUBLIC ${OPENAIR_TARGETS}/SIMU/USER)
|
||||
target_link_libraries (oaisim_nos1
|
||||
-Wl,--start-group
|
||||
RRC_LIB X2AP_LIB SECU_CN UTIL HASHTABLE SCHED_RU_LIB SCHED_UE_LIB PHY_COMMON PHY_UE PHY_RU LFDS ${MSC_LIB} ${ITTI_LIB} SIMU L2_UE ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} LFDS7
|
||||
-Wl,--end-group z dl )
|
||||
|
||||
target_link_libraries (oaisim_nos1 ${LIBXML2_LIBRARIES} ${LAPACK_LIBRARIES})
|
||||
target_link_libraries (oaisim_nos1 pthread m ${CONFIG_LIBRARIES} rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES}
|
||||
${ATLAS_LIBRARIES} ${XFORMS_LIBRARIES} ${OPENPGM_LIBRARIES} ${PROTOBUF_LIB} ${CMAKE_DL_LIBS} ${LIBYAML_LIBRARIES})
|
||||
#Force link with forms, regardless XFORMS option
|
||||
target_link_libraries (oaisim_nos1 forms)
|
||||
|
||||
#message("protobuflib is ${PROTOBUF_LIB}")
|
||||
|
||||
target_link_libraries (oaisim_nos1 ${T_LIB})
|
||||
|
||||
|
||||
# Unitary tests for each piece of L1: example, mbmssim is MBMS L1 simulator
|
||||
#####################################
|
||||
@@ -2267,7 +2178,7 @@ endforeach(myExe)
|
||||
if (${T_TRACER})
|
||||
foreach(i
|
||||
#all "add_executable" definitions (except tests, rb_tool, updatefw)
|
||||
lte-softmodem lte-softmodem-nos1 oaisim oaisim_nos1
|
||||
lte-softmodem lte-softmodem-nos1
|
||||
dlsim_tm4 dlsim dlsim_tm7 ulsim pbchsim scansim mbmssim
|
||||
pdcchsim pucchsim prachsim syncsim
|
||||
#all "add_library" definitions
|
||||
|
||||
@@ -956,21 +956,21 @@
|
||||
<pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash</pre_exec>
|
||||
<pre_exec_args></pre_exec_args>
|
||||
<main_exec> $OPENAIR_DIR/targets/bin/dlsim.Rel14</main_exec>
|
||||
<main_exec_args> -m5 -gF -s-1 -w1.0 -f.2 -n500 -B50 -c2 -z2 -O70
|
||||
-m4 -gF -s0 -w1.0 -f.2 -n500 -B6 -c4 -z2 -O70
|
||||
-m15 -gF -s6.7 -w1.0 -f.2 -n500 -B50 -c2 -z2 -O70
|
||||
-m14 -gF -s6.7 -w1.0 -f.2 -n500 -B25 -c3 -z2 -O70
|
||||
-m15 -gG -s6.7 -w1.0 -f.2 -n500 -B50 -c2 -z2 -O30
|
||||
-m14 -gG -s1.4 -w1.0 -f.2 -n500 -B25 -c3 -z2 -O30
|
||||
-m25 -gF -s17.4 -w1.0 -f.2 -n500 -B25 -c3 -z2 -O70
|
||||
-m25 -gF -s17.5 -w1.0 -f.2 -n500 -B25 -c3 -z2 -r1022 -O70
|
||||
-m26 -gF -s17.7 -w1.0 -f.2 -n500 -B50 -c2 -z2 -O70
|
||||
-m26 -gF -s17.6 -w1.0 -f.2 -n500 -B100 -c2 -z2 -O70
|
||||
-m26 -gF -s17.3 -w1.0 -f.2 -n500 -B100 -c2 -z2 -r1600 -O70
|
||||
-m26 -gF -s16.6 -w1.0 -f.2 -n500 -B100 -c2 -z2 -r1899 -O70
|
||||
-m14 -gF -s6.8 -w1.0 -f.2 -n500 -B50 -c2 -x2 -y2 -z2 -O70
|
||||
-m13 -gF -s5.9 -w1.0 -f.2 -n500 -B25 -c3 -x2 -y2 -z2 -O70</main_exec_args>
|
||||
<tags>dlsim.test1 dlsim.test5 dlsim.test6 dlsim.test6b dlsim.test7 dlsim.test7b dlsim.test10 dlsim.test10b dlsim.test11 dlsim.test11b dlsim.TM2_test1 dlsim.TM2_test1b dlsim.TM2_test1c</tags>
|
||||
<main_exec_args> -m5 -gF -s-1 -w1.0 -f.2 -n500 -B50 -c2 -z2 -O60
|
||||
-m4 -gF -s0 -w1.0 -f.2 -n500 -B6 -c4 -z2 -O60
|
||||
-m15 -gF -s6.7 -w1.0 -f.2 -n500 -B50 -c2 -z2 -O60
|
||||
-m15 -gF -s6.7 -w1.0 -f.2 -n500 -B25 -c2 -z2 -O60
|
||||
-m15 -gG -s1.4 -w1.0 -f.2 -n500 -B50 -c2 -z2 -O25
|
||||
-m15 -gG -s1.4 -w1.0 -f.2 -n500 -B25 -c2 -z2 -O25
|
||||
-m25 -gF -s17.4 -w1.0 -f.2 -n500 -B25 -c3 -z2 -O60
|
||||
-m25 -gF -s17.5 -w1.0 -f.2 -n500 -B25 -c3 -z2 -r1022 -O60
|
||||
-m26 -gF -s17.7 -w1.0 -f.2 -n500 -B50 -c2 -z2 -O60
|
||||
-m26 -gF -s17.6 -w1.0 -f.2 -n500 -B100 -c2 -z2 -O60
|
||||
-m26 -gF -s17.3 -w1.0 -f.2 -n500 -B100 -c2 -z2 -r1600 -O60
|
||||
-m26 -gF -s16.6 -w1.0 -f.2 -n500 -B100 -c2 -z2 -r1899 -O60
|
||||
-m14 -gF -s6.8 -w1.0 -f.2 -n500 -B50 -c2 -x2 -y2 -z2 -O60
|
||||
-m13 -gF -s5.9 -w1.0 -f.2 -n500 -B25 -c3 -x2 -y2 -z2 -O60</main_exec_args>
|
||||
<tags>dlsim.test1 dlsim.test5 dlsim.test6 dlsim.test6b dlsim.test7 dlsim.test7b dlsim.test10 dlsim.test10b dlsim.test11 dlsim.TM2_test1 dlsim.TM2_test1b</tags>
|
||||
<search_expr_true>"passed"</search_expr_true>
|
||||
<search_expr_false>segmentation fault|assertion|exiting|fatal</search_expr_false>
|
||||
<nruns>3</nruns>
|
||||
@@ -990,12 +990,12 @@
|
||||
<pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash</pre_exec>
|
||||
<pre_exec_args></pre_exec_args>
|
||||
<main_exec> $OPENAIR_DIR/targets/bin/ulsim.Rel14</main_exec>
|
||||
<main_exec_args> -B25 -m5 -y1 -gN -x1 -s6 -w1.0 -e.1 -P -n500 -O70 -L
|
||||
-B25 -m16 -y1 -gN -x1 -s12 -w1.0 -e.1 -P -n500 -O70 -L
|
||||
-B50 -m5 -y1 -gN -x1 -s6 -w1.0 -e.1 -P -n500 -O70 -L
|
||||
-B50 -m16 -y1 -gN -x1 -s12 -w1.0 -e.1 -P -n500 -O70 -L
|
||||
-B100 -m5 -y1 -gN -x1 -s6 -w1.0 -e.1 -P -n500 -O70 -L
|
||||
-B100 -m16 -y1 -gN -x1 -s12 -w1.0 -e.1 -P -n500 -O70 -L</main_exec_args>
|
||||
<main_exec_args> -B25 -m5 -y1 -gN -x1 -s6 -w1.0 -e.1 -P -n500 -O70
|
||||
-B25 -m16 -y1 -gN -x1 -s12 -w1.0 -e.1 -P -n500 -O70
|
||||
-B50 -m5 -y1 -gN -x1 -s6 -w1.0 -e.1 -P -n500 -O70
|
||||
-B50 -m16 -y1 -gN -x1 -s12 -w1.0 -e.1 -P -n500 -O70
|
||||
-B100 -m5 -y1 -gN -x1 -s6 -w1.0 -e.1 -P -n500 -O70
|
||||
-B100 -m16 -y1 -gN -x1 -s12 -w1.0 -e.1 -P -n500 -O70 </main_exec_args>
|
||||
<tags>ulsim.test1 ulsim.test2 ulsim.test3 ulsim.test4 ulsim.test5 ulsim.test6</tags>
|
||||
<search_expr_true>"passed"</search_expr_true>
|
||||
<search_expr_false>segmentation fault|assertion|exiting|fatal</search_expr_false>
|
||||
|
||||
+2
-143
@@ -112,8 +112,6 @@ Options
|
||||
-t | --transport protocol
|
||||
ETHERNET , None
|
||||
Adds this trasport protocol support in compilation
|
||||
--oaisim
|
||||
Makes the oaisim simulator. Hardware will be defaulted to \"None\".
|
||||
--phy_simulators
|
||||
Makes the unitary tests Layer 1 simulators
|
||||
--core_simulators
|
||||
@@ -125,12 +123,12 @@ Options
|
||||
-V | --vcd
|
||||
Adds a debgging facility to the binary files: GUI with major internal synchronization events
|
||||
-x | --xforms
|
||||
Adds a software oscilloscope feature to the produced binaries. If oaisim, then enable PRINT_STATS.
|
||||
Adds a software oscilloscope feature to the produced binaries.
|
||||
--install-system-files
|
||||
Install OpenArInterface required files in Linux system
|
||||
(will ask root password)
|
||||
--noS1
|
||||
Compiles oaisim or lte-softmodem without S1 interface, using direct link to IP instead
|
||||
Compiles lte-softmodem without S1 interface, using direct link to IP instead
|
||||
--verbose-compile
|
||||
Shows detailed compilation instructions in makefile
|
||||
--cflags_processor
|
||||
@@ -165,11 +163,8 @@ Options
|
||||
Generates a basic [1 UE + 1 eNB + no channel] simulator.
|
||||
See targets/ARCH/tcp_bridge/README.tcp_bridge_oai for documentation.
|
||||
Usage (first build):
|
||||
oaisim (eNB + UE): ./build_oai -I --oaisim -x --install-system-files
|
||||
Eurecom EXMIMO + COTS UE : ./build_oai -I --eNB -x --install-system-files
|
||||
NI/ETTUS B201 + COTS UE : ./build_oai -I --eNB -x --install-system-files -w USRP
|
||||
Usage (Regular):
|
||||
oaisim : ./build_oai --oaisim -x
|
||||
Eurecom EXMIMO + OAI ENB : ./build_oai --eNB -x
|
||||
NI/ETTUS B201 + OAI ENB : ./build_oai --eNB -x -w USRP"
|
||||
}
|
||||
@@ -255,10 +250,6 @@ function main() {
|
||||
echo_info "Setting transport protocol to: $TP"
|
||||
fi
|
||||
shift 2;;
|
||||
--oaisim)
|
||||
oaisim=1
|
||||
echo_info "Will compile oaisim and drivers nasmesh, ..."
|
||||
shift;;
|
||||
--phy_simulators)
|
||||
SIMUS_PHY=1
|
||||
echo_info "Will compile dlsim, ulsim, ..."
|
||||
@@ -495,16 +486,6 @@ function main() {
|
||||
check_install_additional_tools
|
||||
fi
|
||||
|
||||
if [ "$oaisim" = "1" ] ; then
|
||||
#to be discussed
|
||||
# there is no RF device transport protocol
|
||||
HW="None"
|
||||
TP="ETHERNET"
|
||||
|
||||
if [ "$XFORMS" == "True" ] ; then
|
||||
PRINT_STATS="True"
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
echo_info "3. building the compilation directives ..."
|
||||
@@ -697,129 +678,7 @@ function main() {
|
||||
cp $OPENAIR_DIR/cmake_targets/tools/init_exmimo2 $dbin
|
||||
fi
|
||||
|
||||
# oaisim compilation
|
||||
###############
|
||||
if [ "$oaisim" = "1" ] ; then
|
||||
dconf=$OPENAIR_DIR/targets/bin
|
||||
if [ "$NOS1" = "1" ] ; then
|
||||
oaisim_build_dir=oaisim_noS1_build_oai
|
||||
oaisim_exec=oaisim_nos1
|
||||
else
|
||||
oaisim_build_dir=oaisim_build_oai
|
||||
oaisim_exec=oaisim
|
||||
fi
|
||||
|
||||
echo_info "Compiling $oaisim_exec ($oaisim_build_dir)"
|
||||
cmake_file=$DIR/$oaisim_build_dir/CMakeLists.txt
|
||||
cp $DIR/$oaisim_build_dir/CMakeLists.template $cmake_file
|
||||
echo "set ( CMAKE_BUILD_TYPE $CMAKE_BUILD_TYPE )" >> $cmake_file
|
||||
echo "set ( CFLAGS_PROCESSOR_USER \"$CFLAGS_PROCESSOR_USER\" )" >> $cmake_file
|
||||
echo "set ( XFORMS $XFORMS )" >> $cmake_file
|
||||
echo "set ( UE_EXPANSION $UE_EXPANSION )" >> $cmake_file
|
||||
echo "set ( PHY_TX_THREAD $UE_EXPANSION )" >> $cmake_file
|
||||
echo "set ( PRE_SCD_THREAD $UE_EXPANSION )" >> $cmake_file
|
||||
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 "set ( UE_NAS_USE_TUN $UE_NAS_USE_TUN )" >> $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
|
||||
cd $DIR/$oaisim_build_dir/build
|
||||
eval $CMAKE_CMD
|
||||
compilations \
|
||||
$oaisim_build_dir $oaisim_exec \
|
||||
$oaisim_exec $dbin/$oaisim_exec.$REL
|
||||
compilations \
|
||||
$oaisim_build_dir $config_libconfig_shlib \
|
||||
lib$config_libconfig_shlib.so $dbin/lib$config_libconfig_shlib.so
|
||||
compilations \
|
||||
$oaisim_build_dir coding \
|
||||
libcoding.so $dbin/libcoding.so
|
||||
|
||||
if [ "$NOS1" != "1" ] ; then
|
||||
|
||||
[ "$CLEAN" = "1" ] && rm -rf $DIR/at_commands/build
|
||||
echo_info "Compiling at_nas_ue"
|
||||
mkdir -p $DIR/at_commands/build
|
||||
cd $DIR/at_commands/build
|
||||
eval $CMAKE_CMD
|
||||
compilations \
|
||||
at_commands at_nas_ue \
|
||||
at_nas_ue $dbin/at_nas_ue
|
||||
|
||||
# ue_ip driver compilation
|
||||
echo_info "Compiling UE specific part (ue_ip driver and usim tools)"
|
||||
compilations \
|
||||
oaisim_build_oai ue_ip \
|
||||
CMakeFiles/ue_ip/ue_ip.ko $dbin/ue_ip.ko
|
||||
|
||||
[ "$CLEAN" = "1" ] && rm -rf $DIR/nas_sim_tools/build
|
||||
mkdir -p $DIR/nas_sim_tools/build
|
||||
cd $DIR/nas_sim_tools/build
|
||||
eval $CMAKE_CMD
|
||||
compilations \
|
||||
nas_sim_tools usim \
|
||||
usim $dbin/usim
|
||||
compilations \
|
||||
nas_sim_tools nvram \
|
||||
nvram $dbin/nvram
|
||||
compilations \
|
||||
nas_sim_tools conf2uedata \
|
||||
conf2uedata $dbin/conf2uedata
|
||||
|
||||
# generate USIM data
|
||||
if [ -f $dbin/conf2uedata ]; then
|
||||
install_nas_tools $conf_nvram_path $gen_nvram_path
|
||||
else
|
||||
echo_warning "not generated UE NAS files: binaries not found"
|
||||
fi
|
||||
else
|
||||
|
||||
compilations \
|
||||
$oaisim_build_dir rb_tool \
|
||||
rb_tool $dbin/rb_tool
|
||||
|
||||
# nasmesh driver compilation
|
||||
compilations \
|
||||
$oaisim_build_dir nasmesh \
|
||||
CMakeFiles/nasmesh/nasmesh.ko $dbin/nasmesh.ko
|
||||
|
||||
#oai_nw_drv
|
||||
#compilations \
|
||||
# $oaisim_build_dir oai_nw_drv \
|
||||
# CMakeFiles/oai_nw_drv/oai_nw_drv.ko $dbin/oai_nw_drv.ko
|
||||
fi
|
||||
|
||||
if [ "$TP" == "ETHERNET" ] ; then
|
||||
compilations \
|
||||
$oaisim_build_dir oai_eth_transpro \
|
||||
liboai_eth_transpro.so $dbin/liboai_eth_transpro.so.$REL
|
||||
ln -sf liboai_eth_transpro.so liboai_transpro.so
|
||||
ln -sf $dbin/liboai_eth_transpro.so.$REL $dbin/liboai_transpro.so
|
||||
echo_info "liboai_transpro.so is linked with ETHERNET library"
|
||||
fi
|
||||
|
||||
cmake_file=$DIR/oaisim_mme_build_oai/CMakeLists.txt
|
||||
cp $DIR/oaisim_mme_build_oai/CMakeLists.template $cmake_file
|
||||
echo "set ( CMAKE_BUILD_TYPE $CMAKE_BUILD_TYPE )" >> $cmake_file
|
||||
echo "set ( XFORMS $XFORMS )" >> $cmake_file
|
||||
echo "set ( UE_EXPANSION $UE_EXPANSION )" >> $cmake_file
|
||||
echo "set ( PHY_TX_THREAD $UE_EXPANSION )" >> $cmake_file
|
||||
echo "set ( PRE_SCD_THREAD $UE_EXPANSION )" >> $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
|
||||
#cd $DIR/oaisim_mme_build_oai/build
|
||||
#eval $CMAKE_CMD
|
||||
#compilations \
|
||||
# oaisim_mme_build_oai oaisim_mme \
|
||||
# oaisim_mme $dbin/oaisim_mme.$REL
|
||||
fi
|
||||
|
||||
# Telnet server compilation
|
||||
#####################
|
||||
|
||||
@@ -42,8 +42,8 @@
|
||||
#include "log.h"
|
||||
|
||||
#if defined (LOG_D) && defined (LOG_E)
|
||||
# define SIG_DEBUG(x, args...) LOG_D(EMU, x, ##args)
|
||||
# define SIG_ERROR(x, args...) LOG_E(EMU, x, ##args)
|
||||
# define SIG_DEBUG(x, args...) LOG_D(RRC, x, ##args)
|
||||
# define SIG_ERROR(x, args...) LOG_E(RRC, x, ##args)
|
||||
#endif
|
||||
|
||||
#ifndef SIG_DEBUG
|
||||
|
||||
@@ -1068,9 +1068,8 @@ uint8_t phy_threegpplte_turbo_decoder8(int16_t *y,
|
||||
if (init_stats) stop_meas(init_stats);
|
||||
|
||||
// do log_map from first parity bit
|
||||
|
||||
|
||||
log_map8(systematic0,yparity1,m11,m10,alpha,beta,ext,n2,0,F,offset8_flag,alpha_stats,beta_stats,gamma_stats,ext_stats);
|
||||
|
||||
while (iteration_cnt++ < max_iterations) {
|
||||
|
||||
#ifdef DEBUG_LOGMAP
|
||||
|
||||
@@ -709,6 +709,7 @@ int init_lte_ue_signal(PHY_VARS_UE *ue,
|
||||
|
||||
for (i=0; i<fp->nb_antennas_rx; i++) {
|
||||
common_vars->rxdata[i] = (int32_t*) malloc16_clear( (fp->samples_per_tti*10+2048)*sizeof(int32_t) );
|
||||
LOG_I(PHY,"common_vars->rxdata[%d] %p\n",i,common_vars->rxdata[i]);
|
||||
common_vars->common_vars_rx_data_per_thread[0].rxdataF[i] = (int32_t*)malloc16_clear( sizeof(int32_t)*(fp->ofdm_symbol_size*14) );
|
||||
common_vars->common_vars_rx_data_per_thread[1].rxdataF[i] = (int32_t*)malloc16_clear( sizeof(int32_t)*(fp->ofdm_symbol_size*14) );
|
||||
}
|
||||
|
||||
@@ -100,6 +100,7 @@ int init_frame_parms(LTE_DL_FRAME_PARMS *frame_parms,uint8_t osf)
|
||||
frame_parms->first_carrier_offset = 1536-600;
|
||||
frame_parms->nb_prefix_samples=(frame_parms->nb_prefix_samples*3)>>2;
|
||||
frame_parms->nb_prefix_samples0=(frame_parms->nb_prefix_samples0*3)>>2;
|
||||
|
||||
}
|
||||
else {
|
||||
frame_parms->ofdm_symbol_size = 2048;
|
||||
@@ -148,7 +149,6 @@ int init_frame_parms(LTE_DL_FRAME_PARMS *frame_parms,uint8_t osf)
|
||||
frame_parms->N_RBGS = 2;
|
||||
frame_parms->N_RBG = 13;
|
||||
|
||||
|
||||
break;
|
||||
|
||||
case 15:
|
||||
@@ -159,6 +159,7 @@ int init_frame_parms(LTE_DL_FRAME_PARMS *frame_parms,uint8_t osf)
|
||||
frame_parms->nb_prefix_samples0>>=(3-log2_osf);
|
||||
frame_parms->N_RBGS = 2;
|
||||
frame_parms->N_RBG = 8;
|
||||
|
||||
break;
|
||||
|
||||
case 6:
|
||||
@@ -169,6 +170,7 @@ int init_frame_parms(LTE_DL_FRAME_PARMS *frame_parms,uint8_t osf)
|
||||
frame_parms->nb_prefix_samples0>>=(4-log2_osf);
|
||||
frame_parms->N_RBGS = 1;
|
||||
frame_parms->N_RBG = 6;
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
|
||||
@@ -57,8 +57,8 @@
|
||||
|
||||
|
||||
|
||||
static uint8_t d[3*(MAX_DCI_SIZE_BITS + 16) + 96];
|
||||
static uint8_t w[3*3*(MAX_DCI_SIZE_BITS+16)];
|
||||
//static uint8_t d[3*(MAX_DCI_SIZE_BITS + 16) + 96];
|
||||
//static uint8_t w[3*3*(MAX_DCI_SIZE_BITS+16)];
|
||||
|
||||
void dci_encoding(uint8_t *a,
|
||||
uint8_t A,
|
||||
@@ -70,6 +70,8 @@ void dci_encoding(uint8_t *a,
|
||||
|
||||
uint8_t D = (A + 16);
|
||||
uint32_t RCC;
|
||||
uint8_t d[3*(MAX_DCI_SIZE_BITS + 16) + 96];
|
||||
uint8_t w[3*3*(MAX_DCI_SIZE_BITS+16)];
|
||||
|
||||
#ifdef DEBUG_DCI_ENCODING
|
||||
int32_t i;
|
||||
@@ -169,7 +171,7 @@ uint8_t *generate_dci0(uint8_t *dci,
|
||||
return(e+coded_bits);
|
||||
}
|
||||
|
||||
uint32_t Y;
|
||||
//uint32_t Y;
|
||||
|
||||
|
||||
|
||||
@@ -368,16 +370,12 @@ uint8_t generate_dci_top(uint8_t num_pdcch_symbols,
|
||||
|
||||
if (dci_alloc[i].L == (uint8_t)L) {
|
||||
|
||||
#ifdef DEBUG_DCI_ENCODING
|
||||
if (dci_alloc[i].rnti==0x1234)
|
||||
LOG_D(PHY,"Generating DCI %d/%d (nCCE %d) of length %d, aggregation %d (%x), rnti %x\n",i,num_dci,dci_alloc[i].firstCCE,dci_alloc[i].dci_length,dci_alloc[i].L,
|
||||
LOG_D(PHY,"Generating DCI %d/%d (nCCE %d) of length %d, aggregation %d (%x), rnti %x\n",
|
||||
i,num_dci,dci_alloc[i].firstCCE,dci_alloc[i].dci_length,dci_alloc[i].L,
|
||||
*(unsigned int*)dci_alloc[i].dci_pdu,
|
||||
dci_alloc[i].rnti);
|
||||
dump_dci(frame_parms,&dci_alloc[i]);
|
||||
#endif
|
||||
|
||||
if (dci_alloc[i].firstCCE>=0) {
|
||||
//printf("generate DCI .%d rnti %d length %d\n", subframe, dci_alloc[i].rnti, dci_alloc[i].dci_length);
|
||||
e_ptr = generate_dci0(dci_alloc[i].dci_pdu,
|
||||
e+(72*dci_alloc[i].firstCCE),
|
||||
dci_alloc[i].dci_length,
|
||||
|
||||
@@ -1998,12 +1998,13 @@ void fill_ulsch(PHY_VARS_eNB *eNB,int UE_id,nfapi_ul_config_ulsch_pdu *ulsch_pdu
|
||||
else if(ulsch->harq_processes[harq_pid]->n_DMRS == 7)
|
||||
ulsch->harq_processes[harq_pid]->n_DMRS2 = 9;
|
||||
|
||||
LOG_D(PHY,"[eNB %d][PUSCH %d] Frame %d, Subframe %d Programming PUSCH with n_DMRS2 %d (cshift %d) ulsch:ndi:%d ulsch_pdu:ndi:%d new_ulsch:%d status:%d ulsch_pdu:rvidx:%d\n",
|
||||
LOG_D(PHY,"[eNB %d][PUSCH %d] Frame %d, Subframe %d Programming PUSCH with n_DMRS2 %d (cshift %d) ulsch:ndi:%d ulsch_pdu:ndi:%d new_ulsch:%d status:%d ulsch_pdu:rvidx:%d ulsch_pdu->ulsch_pdu_rel8.size %d\n",
|
||||
eNB->Mod_id,harq_pid,frame,subframe,
|
||||
ulsch->harq_processes[harq_pid]->n_DMRS2,
|
||||
ulsch->harq_processes[harq_pid]->n_DMRS,
|
||||
ulsch->harq_processes[harq_pid]->ndi, ulsch_pdu->ulsch_pdu_rel8.new_data_indication, new_ulsch, ulsch->harq_processes[harq_pid]->status,
|
||||
ulsch_pdu->ulsch_pdu_rel8.redundancy_version);
|
||||
ulsch_pdu->ulsch_pdu_rel8.redundancy_version,
|
||||
ulsch_pdu->ulsch_pdu_rel8.size);
|
||||
|
||||
ulsch->harq_processes[harq_pid]->rvidx = ulsch_pdu->ulsch_pdu_rel8.redundancy_version;
|
||||
if(ulsch_pdu->ulsch_pdu_rel8.modulation_type!=0)
|
||||
|
||||
@@ -108,6 +108,7 @@ void rx_prach0(PHY_VARS_eNB *eNB,
|
||||
int prach_ifft_cnt=0;
|
||||
#endif
|
||||
#ifdef PRACH_DEBUG
|
||||
int en=0;
|
||||
int en0=0;
|
||||
#endif
|
||||
|
||||
@@ -229,7 +230,7 @@ void rx_prach0(PHY_VARS_eNB *eNB,
|
||||
#ifdef PRACH_DEBUG
|
||||
int32_t en0=signal_energy((int32_t*)prach[aa],fp->samples_per_tti);
|
||||
int8_t dbEn0 = dB_fixed(en0);
|
||||
int8_t rach_dBm = dbEn0 - eNB->rx_total_gain_dB;
|
||||
int8_t rach_dBm = dbEn0 - ru->rx_total_gain_dB;
|
||||
|
||||
#ifdef PRACH_WRITE_OUTPUT_DEBUG
|
||||
if (dbEn0>32 && prach[0]!= NULL)
|
||||
@@ -466,7 +467,7 @@ void rx_prach0(PHY_VARS_eNB *eNB,
|
||||
} else if (eNB!=NULL) {
|
||||
|
||||
#ifdef PRACH_DEBUG
|
||||
int en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],840));
|
||||
en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],840));
|
||||
if ((en > 60)&&(br_flag==1)) LOG_I(PHY,"PRACH (br_flag %d,ce_level %d, n_ra_prb %d, k %d): Frame %d, Subframe %d => %d dB\n",br_flag,ce_level,n_ra_prb,k,eNB->proc.frame_rx,eNB->proc.subframe_rx,en);
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -1089,7 +1089,7 @@ uint32_t rx_pucch(PHY_VARS_eNB *eNB,
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG_PUCCH_RX
|
||||
LOG_D(PHY,"[eNB] PUCCH fmt1: stat_max : %d, sigma2_dB %d (%d, %d), phase_max : %d\n",dB_fixed(stat_max),sigma2_dB,eNB->measurements.n0_subband_power_tot_dBm[6],pucch1_thres,phase_max);
|
||||
LOG_I(PHY,"[eNB] PUCCH fmt1: stat_max : %d, sigma2_dB %d (%d, %d), phase_max : %d\n",dB_fixed(stat_max),sigma2_dB,eNB->measurements.n0_subband_power_tot_dBm[6],pucch1_thres,phase_max);
|
||||
#endif
|
||||
|
||||
|
||||
@@ -1351,9 +1351,9 @@ uint32_t rx_pucch(PHY_VARS_eNB *eNB,
|
||||
} // aa
|
||||
|
||||
|
||||
LOG_D(PHY,"PUCCH 1a/b: subframe %d : stat %d,%d (pos %d)\n",subframe,stat_re,stat_im,
|
||||
LOG_I(PHY,"PUCCH 1a/b: subframe %d : stat %d,%d (pos %d)\n",subframe,stat_re,stat_im,
|
||||
(subframe<<10) + (eNB->pucch1ab_stats_cnt[UE_id][subframe]));
|
||||
LOG_D(PHY,"PUCCH 1a/b: subframe %d : sigma2_dB %d, stat_max %d, pucch1_thres %d\n",subframe,sigma2_dB,dB_fixed(stat_max),pucch1_thres);
|
||||
LOG_I(PHY,"PUCCH 1a/b: subframe %d : sigma2_dB %d, stat_max %d, pucch1_thres %d\n",subframe,sigma2_dB,dB_fixed(stat_max),pucch1_thres);
|
||||
|
||||
eNB->pucch1ab_stats[UE_id][(subframe<<11) + 2*(eNB->pucch1ab_stats_cnt[UE_id][subframe])] = (stat_re);
|
||||
eNB->pucch1ab_stats[UE_id][(subframe<<11) + 1+2*(eNB->pucch1ab_stats_cnt[UE_id][subframe])] = (stat_im);
|
||||
@@ -1370,7 +1370,7 @@ uint32_t rx_pucch(PHY_VARS_eNB *eNB,
|
||||
#if defined(USRP_REC_PLAY)
|
||||
LOG_D(PHY,"PUCCH 1a/b: NAK subframe %d : sigma2_dB %d, stat_max %d, pucch1_thres %d\n",subframe,sigma2_dB,dB_fixed(stat_max),pucch1_thres);
|
||||
#else
|
||||
LOG_D(PHY,"PUCCH 1a/b: subframe %d : sigma2_dB %d, stat_max %d, pucch1_thres %d\n",subframe,sigma2_dB,dB_fixed(stat_max),pucch1_thres);
|
||||
LOG_I(PHY,"PUCCH 1a/b: subframe %d : sigma2_dB %d, stat_max %d, pucch1_thres %d\n",subframe,sigma2_dB,dB_fixed(stat_max),pucch1_thres);
|
||||
#endif
|
||||
*payload = 4; // DTX
|
||||
((int16_t*)&eNB->pucch1ab_stats[UE_id][(subframe<<10) + (eNB->pucch1ab_stats_cnt[UE_id][subframe])])[0] = (int16_t)(stat_re);
|
||||
|
||||
@@ -337,7 +337,7 @@ int ulsch_decoding_data_2thread0(td_params* tdp) {
|
||||
else
|
||||
crc_type = CRC24_B;
|
||||
|
||||
|
||||
|
||||
ret = tc(&ulsch_harq->d[r][96],
|
||||
NULL,
|
||||
ulsch_harq->c[r],
|
||||
@@ -667,7 +667,8 @@ int ulsch_decoding_data(PHY_VARS_eNB *eNB,int UE_id,int harq_pid,int llr8_flag)
|
||||
crc_type = CRC24_A;
|
||||
else
|
||||
crc_type = CRC24_B;
|
||||
|
||||
|
||||
|
||||
start_meas(&eNB->ulsch_turbo_decoding_stats);
|
||||
|
||||
ret = tc(&ulsch_harq->d[r][96],
|
||||
|
||||
@@ -943,7 +943,7 @@ int check_dci_format1_1a_coherency(DCI_format_t dci_format,
|
||||
}
|
||||
}
|
||||
|
||||
if ((rnti==si_rnti) || (rnti==p_rnti) || (rnti==ra_rnti))
|
||||
if (dci_format == format1A && ((rnti==si_rnti) || (rnti==p_rnti) || (rnti==ra_rnti)))
|
||||
{
|
||||
NPRB = (TPC&1) + 2;
|
||||
switch (N_RB_DL) {
|
||||
@@ -960,8 +960,8 @@ int check_dci_format1_1a_coherency(DCI_format_t dci_format,
|
||||
RIV_max = RIV_max100;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
}
|
||||
else if (dci_format == format1A)
|
||||
{
|
||||
switch (N_RB_DL) {
|
||||
case 6:
|
||||
@@ -996,13 +996,13 @@ int check_dci_format1_1a_coherency(DCI_format_t dci_format,
|
||||
}
|
||||
|
||||
|
||||
if(dci_format == format1)
|
||||
else if (dci_format == format1)
|
||||
{
|
||||
NPRB = conv_nprb(rah, rballoc, N_RB_DL);
|
||||
}
|
||||
|
||||
|
||||
if(rballoc > RIV_max)
|
||||
if(dci_format == format1A && rballoc > RIV_max)
|
||||
{
|
||||
// LOG_I(PHY,"bad dci rballoc rballoc %d RIV_max %lld \n",rballoc, RIV_max);
|
||||
// DCI false detection
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
#include "UTIL/LOG/vcd_signal_dumper.h"
|
||||
#include "PHY/LTE_UE_TRANSPORT/transport_proto_ue.h"
|
||||
//#define DEBUG_DLSCH_DECODING
|
||||
//#define UE_DEBUG_TRACE 1
|
||||
#define UE_DEBUG_TRACE 1
|
||||
|
||||
|
||||
void free_ue_dlsch(LTE_UE_DLSCH_t *dlsch)
|
||||
|
||||
@@ -387,6 +387,7 @@ int initial_sync(PHY_VARS_UE *ue, runmode_t mode)
|
||||
// Now TDD normal prefix
|
||||
frame_parms->Ncp=NORMAL;
|
||||
frame_parms->frame_type=TDD;
|
||||
frame_parms->tdd_config=1;
|
||||
init_frame_parms(frame_parms,1);
|
||||
|
||||
if (sync_pos >= frame_parms->nb_prefix_samples)
|
||||
@@ -426,6 +427,7 @@ int initial_sync(PHY_VARS_UE *ue, runmode_t mode)
|
||||
// Now TDD extended prefix
|
||||
frame_parms->Ncp=EXTENDED;
|
||||
frame_parms->frame_type=TDD;
|
||||
frame_parms->tdd_config=1;
|
||||
init_frame_parms(frame_parms,1);
|
||||
sync_pos2 = sync_pos - frame_parms->nb_prefix_samples;
|
||||
|
||||
@@ -493,17 +495,6 @@ int initial_sync(PHY_VARS_UE *ue, runmode_t mode)
|
||||
#endif
|
||||
|
||||
// send sync status to higher layers later when timing offset converge to target timing
|
||||
#if OAISIM
|
||||
if (ue->mac_enabled==1) {
|
||||
LOG_I(PHY,"[UE%d] Sending synch status to higher layers\n",ue->Mod_id);
|
||||
//mac_resynch();
|
||||
dl_phy_sync_success(ue->Mod_id,ue->proc.proc_rxtx[0].frame_rx,0,1);//ue->common_vars.eNb_id);
|
||||
ue->UE_mode[0] = PRACH;
|
||||
}
|
||||
else {
|
||||
ue->UE_mode[0] = PUSCH;
|
||||
}
|
||||
#endif
|
||||
|
||||
generate_pcfich_reg_mapping(frame_parms);
|
||||
generate_phich_reg_mapping(frame_parms);
|
||||
|
||||
@@ -369,7 +369,7 @@ void rx_phich(PHY_VARS_UE *ue,
|
||||
|
||||
if (HI16>0) { //NACK
|
||||
if (ue->ulsch_Msg3_active[eNB_id] == 1) {
|
||||
LOG_D(PHY,"[UE %d][PUSCH %d][RAPROC] Frame %d subframe %d Msg3 PHICH, received NAK (%d) nseq %d, ngroup %d\n",
|
||||
LOG_I(PHY,"[UE %d][PUSCH %d][RAPROC] Frame %d subframe %d Msg3 PHICH, received NAK (%d) nseq %d, ngroup %d\n",
|
||||
ue->Mod_id,harq_pid,
|
||||
proc->frame_rx,
|
||||
subframe,
|
||||
@@ -379,7 +379,7 @@ void rx_phich(PHY_VARS_UE *ue,
|
||||
|
||||
ulsch->f_pusch += delta_PUSCH_acc[ulsch->harq_processes[harq_pid]->TPC];
|
||||
|
||||
LOG_D(PHY,"[PUSCH %d] AbsSubframe %d.%d: f_pusch (ACC) %d, adjusting by %d (TPC %d)\n",
|
||||
LOG_I(PHY,"[PUSCH %d] AbsSubframe %d.%d: f_pusch (ACC) %d, adjusting by %d (TPC %d)\n",
|
||||
harq_pid,proc->frame_rx,subframe,ulsch->f_pusch,
|
||||
delta_PUSCH_acc[ulsch->harq_processes[harq_pid]->TPC],
|
||||
ulsch->harq_processes[harq_pid]->TPC);
|
||||
|
||||
@@ -41,6 +41,8 @@
|
||||
|
||||
#include "../LTE_TRANSPORT/prach_extern.h"
|
||||
|
||||
//#define PRACH_DEBUG 1
|
||||
|
||||
int32_t generate_prach( PHY_VARS_UE *ue, uint8_t eNB_id, uint8_t subframe, uint16_t Nf )
|
||||
{
|
||||
|
||||
@@ -98,7 +100,7 @@ int32_t generate_prach( PHY_VARS_UE *ue, uint8_t eNB_id, uint8_t subframe, uint1
|
||||
|
||||
#else //normal case (simulation)
|
||||
prach_start = subframe*ue->frame_parms.samples_per_tti-ue->N_TA_offset;
|
||||
LOG_D(PHY,"[UE %d] prach_start %d, rx_offset %d, hw_timing_advance %d, N_TA_offset %d\n", ue->Mod_id,
|
||||
LOG_I(PHY,"[UE %d] prach_start %d, rx_offset %d, hw_timing_advance %d, N_TA_offset %d\n", ue->Mod_id,
|
||||
prach_start,
|
||||
ue->rx_offset,
|
||||
ue->hw_timing_advance,
|
||||
|
||||
@@ -182,7 +182,7 @@ int generate_ue_ulsch_params_from_rar(PHY_VARS_UE *ue,
|
||||
// initialize power control based on PRACH power
|
||||
ulsch->f_pusch = delta_PUSCH_msg2[ulsch->harq_processes[harq_pid]->TPC] +
|
||||
get_deltaP_rampup(ue->Mod_id,ue->CC_id);
|
||||
LOG_D(PHY,"[UE %d][PUSCH PC] Initializing f_pusch to %d dB, TPC %d (delta_PUSCH_msg2 %d dB), deltaP_rampup %d dB\n",
|
||||
LOG_I(PHY,"[UE %d][PUSCH PC] Initializing f_pusch to %d dB, TPC %d (delta_PUSCH_msg2 %d dB), deltaP_rampup %d dB\n",
|
||||
ue->Mod_id,ulsch->f_pusch,ulsch->harq_processes[harq_pid]->TPC,delta_PUSCH_msg2[ulsch->harq_processes[harq_pid]->TPC],
|
||||
get_deltaP_rampup(ue->Mod_id,ue->CC_id));
|
||||
|
||||
|
||||
@@ -83,6 +83,9 @@ void remove_7_5_kHz(RU_t *ru,uint8_t slot)
|
||||
|
||||
len = frame_parms->samples_per_tti/2;
|
||||
|
||||
AssertFatal(slot_offset<10*frame_parms->samples_per_tti,
|
||||
"slot_offset %d >= %d\n",slot_offset,10*frame_parms->samples_per_tti);
|
||||
|
||||
for (aa=0; aa<ru->nb_rx; aa++) {
|
||||
|
||||
#if defined(__x86_64__) || defined(__i386__)
|
||||
|
||||
@@ -981,7 +981,7 @@ typedef uint8_t(encoder_if_t)(uint8_t *input,
|
||||
|
||||
static inline void wait_sync(char *thread_name) {
|
||||
|
||||
printf( "waiting for sync (%s)\n",thread_name);
|
||||
printf( "waiting for sync (%s,%d/%p,%p,%p)\n",thread_name,sync_var,&sync_var,&sync_cond,&sync_mutex);
|
||||
pthread_mutex_lock( &sync_mutex );
|
||||
|
||||
while (sync_var<0)
|
||||
|
||||
@@ -287,9 +287,9 @@ typedef struct {
|
||||
|
||||
#ifndef malloc16
|
||||
# ifdef __AVX2__
|
||||
# define malloc16(x) memalign(32,x)
|
||||
# define malloc16(x) memalign(32,x+32)
|
||||
# else
|
||||
# define malloc16(x) memalign(16,x)
|
||||
# define malloc16(x) memalign(16,x+16)
|
||||
# endif
|
||||
#endif
|
||||
#define free16(y,x) free(y)
|
||||
@@ -306,9 +306,9 @@ typedef struct {
|
||||
static inline void* malloc16_clear( size_t size )
|
||||
{
|
||||
#ifdef __AVX2__
|
||||
void* ptr = memalign(32, size);
|
||||
void* ptr = memalign(32, size+32);
|
||||
#else
|
||||
void* ptr = memalign(16, size);
|
||||
void* ptr = memalign(16, size+16);
|
||||
#endif
|
||||
DevAssert(ptr);
|
||||
memset( ptr, 0, size );
|
||||
|
||||
@@ -70,7 +70,6 @@ extern char mode_string[4][20];
|
||||
|
||||
|
||||
|
||||
extern unsigned char NB_RU;
|
||||
|
||||
#ifndef OPENAIR2
|
||||
extern unsigned char NB_eNB_INST;
|
||||
|
||||
@@ -65,7 +65,6 @@ extern int flagMag;
|
||||
|
||||
extern char mode_string[4][20];
|
||||
|
||||
extern unsigned char NB_RU;
|
||||
|
||||
#ifndef OPENAIR2
|
||||
extern unsigned char NB_eNB_INST;
|
||||
|
||||
@@ -66,7 +66,6 @@ char mode_string[4][20] = {"NOT SYNCHED","PRACH","RAR","PUSCH"};
|
||||
|
||||
#include "SIMULATION/ETH_TRANSPORT/vars.h"
|
||||
|
||||
unsigned char NB_RU=0;
|
||||
|
||||
#ifndef OPENAIR2
|
||||
unsigned char NB_eNB_INST=0;
|
||||
|
||||
@@ -60,7 +60,6 @@ char mode_string[4][20] = {"NOT SYNCHED","PRACH","RAR","PUSCH"};
|
||||
|
||||
#include "SIMULATION/ETH_TRANSPORT/vars.h"
|
||||
|
||||
unsigned char NB_RU=0;
|
||||
|
||||
#ifndef OPENAIR2
|
||||
unsigned char NB_eNB_INST=0;
|
||||
|
||||
@@ -451,7 +451,7 @@ uint8_t get_reset_ack(LTE_DL_FRAME_PARMS *frame_parms,
|
||||
o_ACK[cw_idx] = harq_ack[subframe_dl0].ack;
|
||||
status = harq_ack[subframe_dl0].send_harq_status;
|
||||
|
||||
//LOG_I(PHY,"dl subframe %d send_harq_status %d cw_idx %d, reset %d\n",subframe_dl0, status, cw_idx, do_reset);
|
||||
LOG_D(PHY,"dl subframe %d send_harq_status %d cw_idx %d, reset %d\n",subframe_dl0, status, cw_idx, do_reset);
|
||||
if(do_reset)
|
||||
harq_ack[subframe_dl0].send_harq_status = 0;
|
||||
//printf("get_ack: Getting ACK/NAK for PDSCH (subframe %d) => %d\n",subframe_dl,o_ACK[0]);
|
||||
@@ -631,7 +631,7 @@ uint8_t get_reset_ack(LTE_DL_FRAME_PARMS *frame_parms,
|
||||
pN_bundled[0] = harq_ack[subframe_rx].vDAI_UL;
|
||||
status = harq_ack[subframe_dl0].send_harq_status + harq_ack[subframe_dl1].send_harq_status + harq_ack[subframe_dl2].send_harq_status + harq_ack[subframe_dl3].send_harq_status;
|
||||
|
||||
LOG_I(PHY,"TDD Config3 UL Sfn %d, dl Sfn0 %d status %d o_Ack %d, dl Sfn1 %d status %d o_Ack %d dl Sfn2 %d status %d o_Ack %d dl Sfn3 %d status %d o_Ack %d subframe_rx %d N_bundled %d status %d\n",
|
||||
LOG_D(PHY,"TDD Config3 UL Sfn %d, dl Sfn0 %d status %d o_Ack %d, dl Sfn1 %d status %d o_Ack %d dl Sfn2 %d status %d o_Ack %d dl Sfn3 %d status %d o_Ack %d subframe_rx %d N_bundled %d status %d\n",
|
||||
subframe_tx, subframe_dl0, harq_ack[subframe_dl0].send_harq_status,harq_ack[subframe_dl0].ack,
|
||||
subframe_dl1, harq_ack[subframe_dl1].send_harq_status,harq_ack[subframe_dl1].ack,
|
||||
subframe_dl2, harq_ack[subframe_dl2].send_harq_status,harq_ack[subframe_dl2].ack,
|
||||
|
||||
@@ -558,11 +558,8 @@ void phy_procedures_eNB_TX(PHY_VARS_eNB *eNB,
|
||||
|
||||
|
||||
|
||||
// num_pdcch_symbols = DCI_pdu->num_pdcch_symbols;
|
||||
num_pdcch_symbols = eNB->pdcch_vars[subframe&1].num_pdcch_symbols;
|
||||
num_dci = eNB->pdcch_vars[subframe&1].num_dci;
|
||||
// LOG_D(PHY,"num_pdcch_symbols %"PRIu8",(dci common %"PRIu8", dci uespec %"PRIu8"\n",num_pdcch_symbols,
|
||||
// DCI_pdu->Num_common_dci,DCI_pdu->Num_ue_spec_dci);
|
||||
LOG_D(PHY,"num_pdcch_symbols %"PRIu8",number dci %"PRIu8"\n",num_pdcch_symbols, num_dci);
|
||||
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_DCI_INFO,num_pdcch_symbols);
|
||||
|
||||
@@ -572,7 +569,6 @@ void phy_procedures_eNB_TX(PHY_VARS_eNB *eNB,
|
||||
if (num_dci > 0)
|
||||
LOG_D(PHY,"[eNB %"PRIu8"] Frame %d, subframe %d: Calling generate_dci_top (pdcch) (num_dci %"PRIu8") num_pdcch_symbols:%d\n",eNB->Mod_id,frame, subframe, num_dci, num_pdcch_symbols);
|
||||
|
||||
//LOG_D(PHY,"Before generate_dci_top num_pdcch_symbols:%d num_dci:%d dci_alloc:dci_length:%d\n", num_pdcch_symbols, num_dci, eNB->pdcch_vars[subframe&1].dci_alloc[0].dci_length);
|
||||
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_PDCCH_TX,1);
|
||||
|
||||
@@ -776,15 +772,15 @@ void uci_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc)
|
||||
case HARQ_SR:
|
||||
|
||||
metric_SR = rx_pucch(eNB,
|
||||
uci->pucch_fmt,
|
||||
i,
|
||||
uci->n_pucch_1_0_sr[0],
|
||||
0, // n2_pucch
|
||||
uci->srs_active, // shortened format
|
||||
&SR_payload,
|
||||
frame,
|
||||
subframe,
|
||||
PUCCH1_THRES);
|
||||
uci->pucch_fmt,
|
||||
i,
|
||||
uci->n_pucch_1_0_sr[0],
|
||||
0, // n2_pucch
|
||||
uci->srs_active, // shortened format
|
||||
&SR_payload,
|
||||
frame,
|
||||
subframe,
|
||||
PUCCH1_THRES);
|
||||
LOG_D(PHY,"[eNB %d][SR %x] Frame %d subframe %d Checking SR is %d (uci.type %d SR n1pucch is %d)\n",
|
||||
eNB->Mod_id,
|
||||
uci->rnti,
|
||||
@@ -849,37 +845,42 @@ void uci_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc)
|
||||
frame,subframe,
|
||||
pucch_b0b1[0][0],metric[0]);
|
||||
|
||||
uci->stat = metric[0];
|
||||
uci->stat = metric[0];
|
||||
fill_uci_harq_indication(eNB,uci,frame,subframe,pucch_b0b1[0],0,0xffff);
|
||||
|
||||
}
|
||||
else { // frame_type == TDD
|
||||
LOG_D(PHY,"Frame %d Subframe %d Demodulating PUCCH (UCI %d) for ACK/NAK (uci->pucch_fmt %d,uci->type %d.uci->frame %d, uci->subframe %d): n1_pucch0 %d SR_payload %d\n",
|
||||
frame,subframe,i,
|
||||
uci->pucch_fmt,uci->type,
|
||||
uci->frame,uci->subframe,uci->n_pucch_1[0][0],
|
||||
SR_payload);
|
||||
#if 1
|
||||
metric[0] = rx_pucch(eNB,
|
||||
uci->pucch_fmt,
|
||||
i,
|
||||
uci->n_pucch_1[0][0],
|
||||
0, //n2_pucch
|
||||
uci->srs_active, // shortened format
|
||||
pucch_b0b1[0],
|
||||
frame,
|
||||
subframe,
|
||||
PUCCH1a_THRES);
|
||||
uci->pucch_fmt,
|
||||
i,
|
||||
uci->n_pucch_1[0][0],
|
||||
0, //n2_pucch
|
||||
uci->srs_active, // shortened format
|
||||
pucch_b0b1[0],
|
||||
frame,
|
||||
subframe,
|
||||
PUCCH1a_THRES);
|
||||
if (uci->type==HARQ_SR && metric[0] > metric_SR) SR_payload = 0;
|
||||
else if (SR_payload == 1) fill_sr_indication(eNB,uci->rnti,frame,subframe,metric_SR);
|
||||
|
||||
if (uci->type==HARQ_SR && metric[0] <= metric_SR) {
|
||||
SR_payload = 1;
|
||||
metric[0] = rx_pucch(eNB,
|
||||
pucch_format1b,
|
||||
i,
|
||||
uci->n_pucch_1_0_sr[0],
|
||||
0, //n2_pucch
|
||||
uci->srs_active, // shortened format
|
||||
pucch_b0b1[0],
|
||||
frame,
|
||||
subframe,
|
||||
PUCCH1a_THRES);
|
||||
pucch_format1b,
|
||||
i,
|
||||
uci->n_pucch_1_0_sr[0],
|
||||
0, //n2_pucch
|
||||
uci->srs_active, // shortened format
|
||||
pucch_b0b1[0],
|
||||
frame,
|
||||
subframe,
|
||||
PUCCH1a_THRES);
|
||||
}
|
||||
#else
|
||||
// if SR was detected, use the n1_pucch from SR
|
||||
@@ -949,7 +950,7 @@ void uci_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc)
|
||||
else if (pucch_b0b1[0][0] != 1 && pucch_b0b1[0][1] != 1) { // 0 ACKs, or at least one DL assignment missed
|
||||
harq_ack[0] = 0;
|
||||
}
|
||||
uci->stat = metric[0];
|
||||
uci->stat = metric[0];
|
||||
fill_uci_harq_indication(eNB,uci,frame,subframe,harq_ack,2,0xffff); // special_bundling mode
|
||||
}
|
||||
else if ((uci->tdd_bundling == 0) && (uci->num_pucch_resources==2)){ // multiplexing + no SR, implement Table 10.1.3-5 (Rel14) for multiplexing with M=2
|
||||
@@ -991,7 +992,7 @@ void uci_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc)
|
||||
}
|
||||
}
|
||||
}
|
||||
uci->stat = max(metric[0],metric[1]);
|
||||
uci->stat = max(metric[0],metric[1]);
|
||||
fill_uci_harq_indication(eNB,uci,frame,subframe,harq_ack,1,tdd_multiplexing_mask); // multiplexing mode
|
||||
} //else if ((uci->tdd_bundling == 0) && (res==2))
|
||||
else if ((uci->tdd_bundling == 0) && (uci->num_pucch_resources==3)){ // multiplexing + no SR, implement Table 10.1.3-6 (Rel14) for multiplexing with M=3
|
||||
@@ -1210,13 +1211,14 @@ void uci_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc)
|
||||
}
|
||||
}
|
||||
}
|
||||
uci->stat = max_metric;
|
||||
uci->stat = max_metric;
|
||||
fill_uci_harq_indication(eNB,uci,frame,subframe,harq_ack,1,tdd_multiplexing_mask); // multiplexing mode
|
||||
} // else if ((uci->tdd_bundling == 0) && (res==4))
|
||||
else { // bundling
|
||||
harq_ack[0] = pucch_b0b1[0][0];
|
||||
harq_ack[1] = pucch_b0b1[0][1];
|
||||
uci->stat = metric[0];
|
||||
uci->stat = metric[0];
|
||||
LOG_D(PHY,"bundling: (%d,%d), metric %d\n",harq_ack[0],harq_ack[1],uci->stat);
|
||||
fill_uci_harq_indication(eNB,uci,frame,subframe,harq_ack,0,0xffff); // special_bundling mode
|
||||
}
|
||||
|
||||
@@ -1285,49 +1287,49 @@ void pusch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc)
|
||||
int rb2 = rb+ulsch_harq->first_rb;
|
||||
eNB->rb_mask_ul[rb2>>5] |= (1<<(rb2&31));
|
||||
}
|
||||
|
||||
|
||||
LOG_D(PHY,"[eNB %d] frame %d, subframe %d: Scheduling ULSCH Reception for UE %d \n", eNB->Mod_id, frame, subframe, i);
|
||||
|
||||
|
||||
nPRS = fp->pusch_config_common.ul_ReferenceSignalsPUSCH.nPRS[subframe<<1];
|
||||
|
||||
|
||||
ulsch->cyclicShift = (ulsch_harq->n_DMRS2 +
|
||||
fp->pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift +
|
||||
nPRS)%12;
|
||||
|
||||
fp->pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift +
|
||||
nPRS)%12;
|
||||
AssertFatal(ulsch_harq->TBS>0,"illegal TBS %d\n",ulsch_harq->TBS);
|
||||
LOG_D(PHY,
|
||||
"[eNB %d][PUSCH %d] Frame %d Subframe %d Demodulating PUSCH: dci_alloc %d, rar_alloc %d, round %d, first_rb %d, nb_rb %d, Qm %d, TBS %d, rv %d, cyclic_shift %d (n_DMRS2 %d, cyclicShift_common %d, ), O_ACK %d, beta_cqi %d \n",
|
||||
eNB->Mod_id,harq_pid,frame,subframe,
|
||||
ulsch_harq->dci_alloc,
|
||||
ulsch_harq->rar_alloc,
|
||||
ulsch_harq->round,
|
||||
ulsch_harq->first_rb,
|
||||
ulsch_harq->nb_rb,
|
||||
ulsch_harq->Qm,
|
||||
ulsch_harq->TBS,
|
||||
ulsch_harq->rvidx,
|
||||
ulsch->cyclicShift,
|
||||
ulsch_harq->n_DMRS2,
|
||||
fp->pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift,
|
||||
ulsch_harq->O_ACK,
|
||||
ulsch->beta_offset_cqi_times8);
|
||||
|
||||
start_meas(&eNB->ulsch_demodulation_stats);
|
||||
|
||||
rx_ulsch(eNB,proc, i);
|
||||
|
||||
stop_meas(&eNB->ulsch_demodulation_stats);
|
||||
|
||||
start_meas(&eNB->ulsch_decoding_stats);
|
||||
|
||||
ret = ulsch_decoding(eNB,proc,
|
||||
i,
|
||||
0, // control_only_flag
|
||||
ulsch_harq->V_UL_DAI,
|
||||
ulsch_harq->nb_rb>20 ? 1 : 0);
|
||||
|
||||
stop_meas(&eNB->ulsch_decoding_stats);
|
||||
|
||||
LOG_D(PHY,"[eNB %d][PUSCH %d] frame %d subframe %d RNTI %x RX power (%d,%d) N0 (%d,%d) dB ACK (%d,%d), decoding iter %d ulsch_harq->cqi_crc_status:%d ackBits:%d ulsch_decoding_stats[t:%lld max:%lld]\n",
|
||||
"[eNB %d][PUSCH %d] Frame %d Subframe %d Demodulating PUSCH: dci_alloc %d, rar_alloc %d, round %d, first_rb %d, nb_rb %d, Qm %d, TBS %d, rv %d, cyclic_shift %d (n_DMRS2 %d, cyclicShift_common %d, ), O_ACK %d, beta_cqi %d \n",
|
||||
eNB->Mod_id,harq_pid,frame,subframe,
|
||||
ulsch_harq->dci_alloc,
|
||||
ulsch_harq->rar_alloc,
|
||||
ulsch_harq->round,
|
||||
ulsch_harq->first_rb,
|
||||
ulsch_harq->nb_rb,
|
||||
ulsch_harq->Qm,
|
||||
ulsch_harq->TBS,
|
||||
ulsch_harq->rvidx,
|
||||
ulsch->cyclicShift,
|
||||
ulsch_harq->n_DMRS2,
|
||||
fp->pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift,
|
||||
ulsch_harq->O_ACK,
|
||||
ulsch->beta_offset_cqi_times8);
|
||||
|
||||
start_meas(&eNB->ulsch_demodulation_stats);
|
||||
|
||||
rx_ulsch(eNB,proc, i);
|
||||
|
||||
stop_meas(&eNB->ulsch_demodulation_stats);
|
||||
|
||||
start_meas(&eNB->ulsch_decoding_stats);
|
||||
|
||||
ret = ulsch_decoding(eNB,proc,
|
||||
i,
|
||||
0, // control_only_flag
|
||||
ulsch_harq->V_UL_DAI,
|
||||
ulsch_harq->nb_rb>20 ? 1 : 0);
|
||||
|
||||
stop_meas(&eNB->ulsch_decoding_stats);
|
||||
|
||||
LOG_D(PHY,"[eNB %d][PUSCH %d] frame %d subframe %d RNTI %x RX power (%d,%d) N0 (%d,%d) dB ACK (%d,%d), decoding iter %d ulsch_harq->cqi_crc_status:%d ackBits:%d ulsch_decoding_stats[t:%lld max:%lld]\n",
|
||||
eNB->Mod_id,harq_pid,
|
||||
frame,subframe,
|
||||
ulsch->rnti,
|
||||
@@ -1341,35 +1343,29 @@ void pusch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc)
|
||||
ulsch_harq->cqi_crc_status,
|
||||
ulsch_harq->O_ACK,
|
||||
eNB->ulsch_decoding_stats.diff_now, eNB->ulsch_decoding_stats.max);
|
||||
|
||||
//compute the expected ULSCH RX power (for the stats)
|
||||
ulsch_harq->delta_TF = get_hundred_times_delta_IF_eNB(eNB,i,harq_pid, 0); // 0 means bw_factor is not considered
|
||||
|
||||
if (ulsch_harq->cqi_crc_status == 1) {
|
||||
|
||||
//compute the expected ULSCH RX power (for the stats)
|
||||
ulsch_harq->delta_TF = get_hundred_times_delta_IF_eNB(eNB,i,harq_pid, 0); // 0 means bw_factor is not considered
|
||||
|
||||
if (ulsch_harq->cqi_crc_status == 1) {
|
||||
#ifdef DEBUG_PHY_PROC
|
||||
//if (((frame%10) == 0) || (frame < 50))
|
||||
print_CQI(ulsch_harq->o,ulsch_harq->uci_format,0,fp->N_RB_DL);
|
||||
//if (((frame%10) == 0) || (frame < 50))
|
||||
print_CQI(ulsch_harq->o,ulsch_harq->uci_format,0,fp->N_RB_DL);
|
||||
#endif
|
||||
|
||||
|
||||
fill_ulsch_cqi_indication(eNB,frame,subframe,
|
||||
ulsch_harq,
|
||||
ulsch->rnti);
|
||||
RC.mac[eNB->Mod_id]->UE_list.UE_sched_ctrl[i].cqi_req_flag &= (~(1 << subframe));
|
||||
}else{
|
||||
if(RC.mac[eNB->Mod_id]->UE_list.UE_sched_ctrl[i].cqi_req_flag & (1 << subframe) ){
|
||||
RC.mac[eNB->Mod_id]->UE_list.UE_sched_ctrl[i].cqi_req_flag &= (~(1 << subframe));
|
||||
RC.mac[eNB->Mod_id]->UE_list.UE_sched_ctrl[i].cqi_req_timer=30;
|
||||
LOG_D(PHY,"Frame %d,Subframe %d, We're supposed to get a cqi here. Set cqi_req_timer to 30.\n",frame,subframe);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
if (ret == (1+MAX_TURBO_ITERATIONS)) {
|
||||
T(T_ENB_PHY_ULSCH_UE_NACK, T_INT(eNB->Mod_id), T_INT(frame), T_INT(subframe), T_INT(ulsch->rnti),
|
||||
T_INT(harq_pid));
|
||||
|
||||
T(T_ENB_PHY_ULSCH_UE_NACK, T_INT(eNB->Mod_id), T_INT(frame), T_INT(subframe), T_INT(ulsch->rnti),
|
||||
T_INT(harq_pid));
|
||||
|
||||
fill_crc_indication(eNB,i,frame,subframe,1); // indicate NAK to MAC
|
||||
fill_rx_indication(eNB,i,frame,subframe); // indicate SDU to MAC
|
||||
|
||||
|
||||
LOG_D(PHY,"[eNB %d][PUSCH %d] frame %d subframe %d UE %d Error receiving ULSCH, round %d/%d (ACK %d,%d)\n",
|
||||
eNB->Mod_id,harq_pid,
|
||||
frame,subframe, i,
|
||||
@@ -1377,24 +1373,24 @@ void pusch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc)
|
||||
ulsch->Mlimit,
|
||||
ulsch_harq->o_ACK[0],
|
||||
ulsch_harq->o_ACK[1]);
|
||||
|
||||
|
||||
if (ulsch_harq->round >= 3) {
|
||||
ulsch_harq->status = SCH_IDLE;
|
||||
ulsch_harq->handled = 0;
|
||||
ulsch->harq_mask &= ~(1 << harq_pid);
|
||||
ulsch_harq->round = 0;
|
||||
}
|
||||
ulsch_harq->status = SCH_IDLE;
|
||||
ulsch_harq->handled = 0;
|
||||
ulsch->harq_mask &= ~(1 << harq_pid);
|
||||
ulsch_harq->round = 0;
|
||||
}
|
||||
#if defined(MESSAGE_CHART_GENERATOR_PHY)
|
||||
MSC_LOG_RX_DISCARDED_MESSAGE(
|
||||
MSC_PHY_ENB,MSC_PHY_UE,
|
||||
NULL,0,
|
||||
"%05u:%02u ULSCH received rnti %x harq id %u round %d",
|
||||
frame,subframe,
|
||||
ulsch->rnti,harq_pid,
|
||||
ulsch_harq->round-1
|
||||
);
|
||||
MSC_PHY_ENB,MSC_PHY_UE,
|
||||
NULL,0,
|
||||
"%05u:%02u ULSCH received rnti %x harq id %u round %d",
|
||||
frame,subframe,
|
||||
ulsch->rnti,harq_pid,
|
||||
ulsch_harq->round-1
|
||||
);
|
||||
#endif
|
||||
|
||||
|
||||
/* Mark the HARQ process to release it later if max transmission reached
|
||||
* (see below).
|
||||
* MAC does not send the max transmission count, we have to deal with it
|
||||
@@ -1433,10 +1429,10 @@ void pusch_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc)
|
||||
LOG_T(PHY,"\n");
|
||||
#endif
|
||||
#endif
|
||||
} // ulsch not in error
|
||||
} // ulsch not in error
|
||||
|
||||
if (ulsch_harq->O_ACK>0) fill_ulsch_harq_indication(eNB,ulsch_harq,ulsch->rnti,frame,subframe,ulsch->bundling);
|
||||
|
||||
|
||||
LOG_D(PHY,"[eNB %d] Frame %d subframe %d: received ULSCH harq_pid %d for UE %d, ret = %d, CQI CRC Status %d, ACK %d,%d, ulsch_errors %d/%d\n",
|
||||
eNB->Mod_id,frame,subframe,
|
||||
harq_pid,
|
||||
@@ -1910,6 +1906,7 @@ void fill_uci_harq_indication(PHY_VARS_eNB *eNB,
|
||||
if (uci->pucch_fmt == pucch_format1a) {
|
||||
pdu->harq_indication_tdd_rel13.tl.tag = NFAPI_HARQ_INDICATION_TDD_REL13_TAG;
|
||||
pdu->harq_indication_tdd_rel13.number_of_ack_nack = 1;
|
||||
LOG_D(PHY,"bundling, pucch1a, number of ack nack %d\n",pdu->harq_indication_tdd_rel13.number_of_ack_nack);
|
||||
AssertFatal(harq_ack[0] == 1 || harq_ack[0] == 2 || harq_ack[0] == 4, "harq_ack[0] is %d, should be 1,2 or 4\n",harq_ack[0]);
|
||||
pdu->harq_indication_tdd_rel13.harq_data[0].bundling.value_0 = harq_ack[0];
|
||||
// release all bundled DLSCH if needed
|
||||
|
||||
@@ -1241,46 +1241,48 @@ void ulsch_common_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc, uint8_t empt
|
||||
if (empty_subframe)
|
||||
{
|
||||
//#if 1
|
||||
overflow = ulsch_start - 9*frame_parms->samples_per_tti;
|
||||
for (aa=0; aa<frame_parms->nb_antennas_tx; aa++) {
|
||||
|
||||
if (overflow > 0)
|
||||
{
|
||||
memset(&ue->common_vars.txdata[aa][ulsch_start],0,4*(frame_parms->samples_per_tti-overflow));
|
||||
memset(&ue->common_vars.txdata[aa][0],0,4*overflow);
|
||||
}
|
||||
else
|
||||
{
|
||||
memset(&ue->common_vars.txdata[aa][ulsch_start],0,4*frame_parms->samples_per_tti);
|
||||
}
|
||||
}
|
||||
/*#else
|
||||
overflow = ulsch_start - 9*frame_parms->samples_per_tti;
|
||||
for (aa=0; aa<frame_parms->nb_antennas_tx; aa++) {
|
||||
|
||||
if (overflow > 0)
|
||||
{
|
||||
memset(&ue->common_vars.txdata[aa][ulsch_start],0,4*(frame_parms->samples_per_tti-overflow));
|
||||
memset(&ue->common_vars.txdata[aa][0],0,4*overflow);
|
||||
}
|
||||
else
|
||||
{
|
||||
memset(&ue->common_vars.txdata[aa][ulsch_start],0,4*frame_parms->samples_per_tti);
|
||||
}
|
||||
for (k=ulsch_start; k<cmin(frame_parms->samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME,ulsch_start+frame_parms->samples_per_tti); k++) {
|
||||
((short*)ue->common_vars.txdata[aa])[2*k] = 0;
|
||||
((short*)ue->common_vars.txdata[aa])[2*k+1] = 0;
|
||||
}
|
||||
/*#else
|
||||
overflow = ulsch_start - 9*frame_parms->samples_per_tti;
|
||||
for (aa=0; aa<frame_parms->nb_antennas_tx; aa++) {
|
||||
for (k=ulsch_start; k<cmin(frame_parms->samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME,ulsch_start+frame_parms->samples_per_tti); k++) {
|
||||
((short*)ue->common_vars.txdata[aa])[2*k] = 0;
|
||||
((short*)ue->common_vars.txdata[aa])[2*k+1] = 0;
|
||||
}
|
||||
|
||||
for (k=0; k<overflow; k++) {
|
||||
((short*)ue->common_vars.txdata[aa])[2*k] = 0;
|
||||
((short*)ue->common_vars.txdata[aa])[2*k+1] = 0;
|
||||
}
|
||||
|
||||
for (k=0; k<overflow; k++) {
|
||||
((short*)ue->common_vars.txdata[aa])[2*k] = 0;
|
||||
((short*)ue->common_vars.txdata[aa])[2*k+1] = 0;
|
||||
}
|
||||
#endif*/
|
||||
return;
|
||||
}
|
||||
#endif*/
|
||||
return;
|
||||
}
|
||||
//#endif
|
||||
|
||||
// if ((frame_tx%100) == 0)
|
||||
LOG_D(PHY,"[UE %d] Frame %d, subframe %d: ulsch_start = %d (rxoff %d, HW TA %d, timing advance %d, TA_offset %d\n",
|
||||
ue->Mod_id,frame_tx,subframe_tx,
|
||||
ulsch_start,
|
||||
ue->rx_offset,
|
||||
ue->hw_timing_advance,
|
||||
ue->timing_advance,
|
||||
ue->N_TA_offset);
|
||||
|
||||
/*
|
||||
LOG_D(PHY,"[UE %d] Frame %d, subframe %d: ulsch_start = %d (rxoff %d, HW TA %d, timing advance %d, TA_offset %d, signal energy %d dB\n",
|
||||
ue->Mod_id,frame_tx,subframe_tx,
|
||||
ulsch_start,
|
||||
ue->rx_offset,
|
||||
ue->hw_timing_advance,
|
||||
ue->timing_advance,
|
||||
ue->N_TA_offset,
|
||||
dB_fixed(signal_energy(&ue->common_vars.txdataF[aa][subframe_tx*nsymb*frame_parms->ofdm_symbol_size],
|
||||
nsymb*frame_parms->ofdm_symbol_size)));
|
||||
*/
|
||||
|
||||
for (aa=0; aa<frame_parms->nb_antennas_tx; aa++) {
|
||||
if (frame_parms->Ncp == 1)
|
||||
@@ -1303,7 +1305,7 @@ void ulsch_common_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc, uint8_t empt
|
||||
#endif
|
||||
nsymb>>1,
|
||||
&ue->frame_parms);
|
||||
|
||||
|
||||
normal_prefix_mod(&ue->common_vars.txdataF[aa][((subframe_tx*nsymb)+(nsymb>>1))*frame_parms->ofdm_symbol_size],
|
||||
#if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)
|
||||
dummy_tx_buffer+(frame_parms->samples_per_tti>>1),
|
||||
@@ -1312,7 +1314,7 @@ void ulsch_common_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc, uint8_t empt
|
||||
#endif
|
||||
nsymb>>1,
|
||||
&ue->frame_parms);
|
||||
}
|
||||
}
|
||||
|
||||
#if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)
|
||||
apply_7_5_kHz(ue,dummy_tx_buffer,0);
|
||||
@@ -1340,11 +1342,11 @@ void ulsch_common_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc, uint8_t empt
|
||||
// handle switch before 1st TX subframe, guarantee that the slot prior to transmission is switch on
|
||||
for (k=ulsch_start - (frame_parms->samples_per_tti>>1) ; k<ulsch_start ; k++) {
|
||||
if (k<0)
|
||||
ue->common_vars.txdata[aa][k+frame_parms->samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME] &= 0xFFFEFFFE;
|
||||
ue->common_vars.txdata[aa][k+frame_parms->samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME] &= 0xFFFEFFFE;
|
||||
else if (k>(frame_parms->samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME))
|
||||
ue->common_vars.txdata[aa][k-frame_parms->samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME] &= 0xFFFEFFFE;
|
||||
ue->common_vars.txdata[aa][k-frame_parms->samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME] &= 0xFFFEFFFE;
|
||||
else
|
||||
ue->common_vars.txdata[aa][k] &= 0xFFFEFFFE;
|
||||
ue->common_vars.txdata[aa][k] &= 0xFFFEFFFE;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
@@ -2177,29 +2179,29 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
|
||||
case pucch_format1a:
|
||||
case pucch_format1b:
|
||||
{
|
||||
if (ue->mac_enabled == 1) {
|
||||
Po_PUCCH = pucch_power_cntl(ue,proc,subframe_tx,eNB_id,format);
|
||||
}
|
||||
else {
|
||||
Po_PUCCH = ue->tx_power_max_dBm;
|
||||
}
|
||||
ue->tx_power_dBm[subframe_tx] = Po_PUCCH;
|
||||
ue->tx_total_RE[subframe_tx] = 12;
|
||||
|
||||
if (ue->mac_enabled == 1) {
|
||||
Po_PUCCH = pucch_power_cntl(ue,proc,subframe_tx,eNB_id,format);
|
||||
}
|
||||
else {
|
||||
Po_PUCCH = ue->tx_power_max_dBm;
|
||||
}
|
||||
ue->tx_power_dBm[subframe_tx] = Po_PUCCH;
|
||||
ue->tx_total_RE[subframe_tx] = 12;
|
||||
|
||||
#if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)
|
||||
tx_amp = get_tx_amp(Po_PUCCH,
|
||||
ue->tx_power_max_dBm,
|
||||
ue->frame_parms.N_RB_UL,
|
||||
1);
|
||||
tx_amp = get_tx_amp(Po_PUCCH,
|
||||
ue->tx_power_max_dBm,
|
||||
ue->frame_parms.N_RB_UL,
|
||||
1);
|
||||
#else
|
||||
tx_amp = AMP;
|
||||
tx_amp = AMP;
|
||||
#endif
|
||||
#if T_TRACER
|
||||
T(T_UE_PHY_PUCCH_TX_POWER, T_INT(eNB_id), T_INT(frame_tx%1024), T_INT(subframe_tx),T_INT(ue->tx_power_dBm[subframe_tx]),
|
||||
T_INT(tx_amp),T_INT(ue->dlsch[ue->current_thread_id[proc->subframe_rx]][eNB_id][0]->g_pucch),T_INT(get_PL(ue->Mod_id,ue->CC_id,eNB_id)));
|
||||
T(T_UE_PHY_PUCCH_TX_POWER, T_INT(eNB_id), T_INT(frame_tx%1024), T_INT(subframe_tx),T_INT(ue->tx_power_dBm[subframe_tx]),
|
||||
T_INT(tx_amp),T_INT(ue->dlsch[ue->current_thread_id[proc->subframe_rx]][eNB_id][0]->g_pucch),T_INT(get_PL(ue->Mod_id,ue->CC_id,eNB_id)));
|
||||
#endif
|
||||
|
||||
#ifdef UE_DEBUG_TRACE
|
||||
|
||||
//#ifdef UE_DEBUG_TRACE
|
||||
if(format == pucch_format1)
|
||||
{
|
||||
LOG_D(PHY,"[UE %d][SR %x] AbsSubframe %d.%d Generating PUCCH 1 (SR for PUSCH), an_srs_simultanous %d, shorten_pucch %d, n1_pucch %d, Po_PUCCH %d\n",
|
||||
@@ -2240,7 +2242,7 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
|
||||
tx_amp);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
//#endif
|
||||
|
||||
#if T_TRACER
|
||||
if(pucch_payload[0])
|
||||
@@ -2392,30 +2394,32 @@ void phy_procedures_UE_TX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,ui
|
||||
frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti*sizeof(int32_t));
|
||||
}
|
||||
|
||||
if (subframe_select(&ue->frame_parms,proc->subframe_tx) == SF_UL ||
|
||||
ue->frame_parms.frame_type == FDD) {
|
||||
if (ue->UE_mode[eNB_id] != PRACH ) {
|
||||
// check cell srs subframe and ue srs subframe. This has an impact on pusch encoding
|
||||
isSubframeSRS = is_srs_occasion_common(&ue->frame_parms,proc->frame_tx,proc->subframe_tx);
|
||||
|
||||
if (ue->UE_mode[eNB_id] != PRACH) {
|
||||
// check cell srs subframe and ue srs subframe. This has an impact on pusch encoding
|
||||
isSubframeSRS = is_srs_occasion_common(&ue->frame_parms,proc->frame_tx,proc->subframe_tx);
|
||||
|
||||
ue_compute_srs_occasion(ue,proc,eNB_id,isSubframeSRS);
|
||||
|
||||
ue_ulsch_uespec_procedures(ue,proc,eNB_id,abstraction_flag);
|
||||
|
||||
LOG_D(PHY,"ULPOWERS After ulsch_uespec_procedures : ue->tx_power_dBm[%d]=%d, NPRB %d\n",
|
||||
subframe_tx,ue->tx_power_dBm[subframe_tx],ue->tx_total_RE[subframe_tx]);
|
||||
}
|
||||
|
||||
if (ue->UE_mode[eNB_id] == PUSCH) {
|
||||
ue_compute_srs_occasion(ue,proc,eNB_id,isSubframeSRS);
|
||||
|
||||
ue_ulsch_uespec_procedures(ue,proc,eNB_id,abstraction_flag);
|
||||
|
||||
LOG_D(PHY,"ULPOWERS After ulsch_uespec_procedures : ue->tx_power_dBm[%d]=%d, NPRB %d\n",
|
||||
subframe_tx,ue->tx_power_dBm[subframe_tx],ue->tx_total_RE[subframe_tx]);
|
||||
}
|
||||
|
||||
if (ue->UE_mode[eNB_id] == PUSCH) {
|
||||
// check if we need to use PUCCH 1a/1b
|
||||
ue_pucch_procedures(ue,proc,eNB_id,abstraction_flag);
|
||||
// check if we need to use SRS
|
||||
ue_srs_procedures(ue,proc,eNB_id,abstraction_flag);
|
||||
} // UE_mode==PUSCH
|
||||
} // UE_mode==PUSCH
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
LOG_D(PHY,"doing ulsch_common_procedures (%d.%d): generate_ul_signal %d\n",frame_tx,subframe_tx,
|
||||
ue->generate_ul_signal[eNB_id]);
|
||||
ulsch_common_procedures(ue,proc, (ue->generate_ul_signal[eNB_id] == 0));
|
||||
|
||||
if ((ue->UE_mode[eNB_id] == PRACH) &&
|
||||
@@ -2491,8 +2495,8 @@ void phy_procedures_UE_S_TX(PHY_VARS_UE *ue,uint8_t eNB_id,uint8_t abstraction_f
|
||||
ue->common_vars.txdata[aa][i] = 0x00010001;
|
||||
|
||||
#else //this is the normal case
|
||||
memset(&ue->common_vars.txdata[aa][0],0,
|
||||
(LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*frame_parms->samples_per_tti)*sizeof(int32_t));
|
||||
// memset(&ue->common_vars.txdata[aa][0],0,
|
||||
// (LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*frame_parms->samples_per_tti)*sizeof(int32_t));
|
||||
#endif //else EXMIMO
|
||||
|
||||
}
|
||||
@@ -2665,6 +2669,9 @@ void ue_pbch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc, uin
|
||||
ue->UE_mode[eNB_id]==NOT_SYNCHED ? 1 : 0);
|
||||
}
|
||||
|
||||
// if this is the first PBCH after initial synchronization, make L1 state = PRACH
|
||||
if (ue->UE_mode[eNB_id]==NOT_SYNCHED) ue->UE_mode[eNB_id] = PRACH;
|
||||
|
||||
if (first_run) {
|
||||
first_run = 0;
|
||||
|
||||
@@ -2786,6 +2793,7 @@ int ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint
|
||||
uint8_t next1_thread_id = ue->current_thread_id[subframe_rx]== (RX_NB_TH-1) ? 0:(ue->current_thread_id[subframe_rx]+1);
|
||||
uint8_t next2_thread_id = next1_thread_id== (RX_NB_TH-1) ? 0:(next1_thread_id+1);
|
||||
|
||||
LOG_D(PHY,"DCI Decoding procedure in %d.%d\n",frame_rx,subframe_rx);
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_PDCCH_PROCEDURES, VCD_FUNCTION_IN);
|
||||
#if UE_TIMING_TRACE
|
||||
start_meas(&ue->dlsch_rx_pdcch_stats);
|
||||
@@ -5228,7 +5236,7 @@ void phy_procedures_UE_lte(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,u
|
||||
}
|
||||
|
||||
if ((subframe_select(&ue->frame_parms,subframe_tx)==SF_S) &&
|
||||
(slot==1)) {
|
||||
(slot==1)) {
|
||||
phy_procedures_UE_S_TX(ue,eNB_id,abstraction_flag);
|
||||
}
|
||||
|
||||
|
||||
@@ -114,7 +114,7 @@ void pusch_power_cntl(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uint8_
|
||||
else if (ue->ulsch[eNB_id]->PHR > 40)
|
||||
ue->ulsch[eNB_id]->PHR = 40;
|
||||
|
||||
LOG_D(PHY,"[UE %d][PUSCH %d] AbsSubframe %d.%d: nb_rb: %d, Po_PUSCH %d dBm : tx power %d, Po_NOMINAL_PUSCH %d,log10(NPRB) %f,PHR %d, PL %d, alpha*PL %f,delta_IF %f,f_pusch %d\n",
|
||||
LOG_D(PHY,"[UE %d][PUSCH %d] AbsSubframe %d.%d: nb_rb: %d, Po_PUSCH %d dBm : tx power max %d , Po_NOMINAL_PUSCH %d,log10(NPRB) %f,PHR %d, PL %d, alpha*PL %f,delta_IF %f,f_pusch %d\n",
|
||||
ue->Mod_id,harq_pid,proc->frame_tx,proc->subframe_tx,nb_rb,
|
||||
ue->ulsch[eNB_id]->Po_PUSCH,
|
||||
ue->tx_power_max_dBm,
|
||||
|
||||
@@ -99,7 +99,7 @@ multicast_link_init(void)
|
||||
SOCK_DGRAM,
|
||||
&group_list[group].port, &sin);
|
||||
|
||||
LOG_D(EMU, "multicast_link_init(): Created socket %d for group %d, port %d\n",
|
||||
LOG_D(PHY, "multicast_link_init(): Created socket %d for group %d, port %d\n",
|
||||
group_list[group].socket,group,group_list[group].port);
|
||||
|
||||
/* Used so we can re-bind to our port while a previous connection is still
|
||||
@@ -107,17 +107,17 @@ multicast_link_init(void)
|
||||
*/
|
||||
if (setsockopt(group_list[group].socket, SOL_SOCKET, SO_REUSEADDR,
|
||||
&reuse_addr, sizeof (reuse_addr)) < 0) {
|
||||
LOG_E(EMU, "[MULTICAST] ERROR : setsockopt:SO_REUSEADDR, exiting ...");
|
||||
LOG_E(PHY, "[MULTICAST] ERROR : setsockopt:SO_REUSEADDR, exiting ...");
|
||||
exit (EXIT_FAILURE);
|
||||
}
|
||||
|
||||
if (multicast_if != NULL) {
|
||||
if (setsockopt(group_list[group].socket, SOL_SOCKET,SO_BINDTODEVICE,
|
||||
multicast_if, strlen(multicast_if)) < 0) {
|
||||
LOG_E(EMU,
|
||||
LOG_E(PHY,
|
||||
"[MULTICAST] ERROR : setsockopt:SO_BINDTODEVICE on interface %s, exiting ...\n",
|
||||
multicast_if);
|
||||
LOG_E(EMU,
|
||||
LOG_E(PHY,
|
||||
"[MULTICAST] make sure that you have a root privilage or run with sudo -E \n");
|
||||
exit (EXIT_FAILURE);
|
||||
}
|
||||
@@ -132,7 +132,7 @@ multicast_link_init(void)
|
||||
|
||||
if (setsockopt (group_list[group].socket, IPPROTO_IP, IP_MULTICAST_LOOP,
|
||||
&multicast_loop, sizeof (multicast_loop)) < 0) {
|
||||
LOG_E(EMU,
|
||||
LOG_E(PHY,
|
||||
"[MULTICAST] ERROR: %s line %d multicast_link_main_loop() IP_MULTICAST_LOOP %m",
|
||||
__FILE__, __LINE__);
|
||||
exit (EXIT_FAILURE);
|
||||
@@ -143,13 +143,13 @@ multicast_link_init(void)
|
||||
command.imr_interface.s_addr = htonl (INADDR_ANY);
|
||||
|
||||
if (command.imr_multiaddr.s_addr == -1) {
|
||||
LOG_E(EMU, "[MULTICAST] ERROR: %s line %d NO MULTICAST", __FILE__, __LINE__);
|
||||
LOG_E(PHY, "[MULTICAST] ERROR: %s line %d NO MULTICAST", __FILE__, __LINE__);
|
||||
exit (EXIT_FAILURE);
|
||||
}
|
||||
|
||||
if (setsockopt (group_list[group].socket, IPPROTO_IP, IP_ADD_MEMBERSHIP,
|
||||
&command, sizeof (command)) < 0) {
|
||||
LOG_E(EMU, "[MULTICAST] ERROR: %s line %d IP_ADD_MEMBERSHIP %m", __FILE__,
|
||||
LOG_E(PHY, "[MULTICAST] ERROR: %s line %d IP_ADD_MEMBERSHIP %m", __FILE__,
|
||||
__LINE__);
|
||||
exit (EXIT_FAILURE);
|
||||
}
|
||||
@@ -202,13 +202,13 @@ multicast_link_read_data (int groupP)
|
||||
if ((groupP < MULTICAST_LINK_NUM_GROUPS) && (groupP >= 0)) {
|
||||
if ((num_bytes = recvfrom (group_list[groupP].socket,
|
||||
group_list[groupP].rx_buffer, 40000, 0, 0, 0)) < 0) {
|
||||
LOG_E(EMU, "[MULTICAST] recvfrom has failed (%d:%s)\n (%s:%d)\n",
|
||||
LOG_E(PHY, "[MULTICAST] recvfrom has failed (%d:%s)\n (%s:%d)\n",
|
||||
errno, strerror(errno), __FILE__, __LINE__);
|
||||
} else {
|
||||
rx_handler(num_bytes,group_list[groupP].rx_buffer);
|
||||
}
|
||||
} else {
|
||||
LOG_E(EMU, "[MULTICAST] ERROR: groupP out of bounds %d\n", groupP);
|
||||
LOG_E(PHY, "[MULTICAST] ERROR: groupP out of bounds %d\n", groupP);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -242,7 +242,7 @@ multicast_link_write_sock(int groupP, char *dataP, uint32_t sizeP)
|
||||
if ((num = sendto (group_list[groupP].socket, dataP, sizeP, 0,
|
||||
(struct sockaddr *) &group_list[groupP].sock_remote_addr,
|
||||
sizeof (group_list[groupP].sock_remote_addr))) < 0) {
|
||||
LOG_E(EMU, "[MULTICAST] sendto has failed (%d:%s)\n (%s:%d)\n",
|
||||
LOG_E(PHY, "[MULTICAST] sendto has failed (%d:%s)\n (%s:%d)\n",
|
||||
errno, strerror(errno),
|
||||
__FILE__, __LINE__);
|
||||
}
|
||||
@@ -274,22 +274,19 @@ int multicast_link_read_data_from_sock(uint8_t is_master)
|
||||
|
||||
multicast_link_build_select_list ();
|
||||
|
||||
LOG_D(EMU, "Stuck on select with timeout %s\n",
|
||||
LOG_D(PHY, "Stuck on select with timeout %s\n",
|
||||
timeout_p == NULL ? "infinite" : "15000 usecs");
|
||||
|
||||
readsocks = select(highsock + 1, &socks, (fd_set *) 0, (fd_set *) 0, timeout_p);
|
||||
|
||||
if (readsocks < 0) {
|
||||
LOG_E(EMU, "Multicast select failed (%d:%s)\n", errno, strerror(errno));
|
||||
LOG_E(PHY, "Multicast select failed (%d:%s)\n", errno, strerror(errno));
|
||||
exit(EXIT_FAILURE);
|
||||
} else if (readsocks > 0) {
|
||||
#ifdef DEBUG_EMU
|
||||
LOG_D(EMU, "Multicast Normal read\n");
|
||||
#endif
|
||||
multicast_link_read();
|
||||
} else {
|
||||
/* Timeout */
|
||||
LOG_I(EMU, "Multicast select time-out\n");
|
||||
LOG_I(PHY, "Multicast select time-out\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -311,21 +308,21 @@ void multicast_link_start(void (*rx_handlerP) (unsigned int, char *),
|
||||
rx_handler = rx_handlerP;
|
||||
multicast_group = _multicast_group;
|
||||
multicast_if = multicast_ifname;
|
||||
LOG_I(EMU, "[MULTICAST] LINK START on interface=%s for group=%d: handler=%p\n",
|
||||
LOG_I(PHY, "[MULTICAST] LINK START on interface=%s for group=%d: handler=%p\n",
|
||||
(multicast_if == NULL) ? "not specified" : multicast_if, multicast_group,
|
||||
rx_handler);
|
||||
multicast_link_init ();
|
||||
#if ! defined(ENABLE_NEW_MULTICAST)
|
||||
LOG_D(EMU, "[MULTICAST] multicast link start thread\n");
|
||||
LOG_D(PHY, "[MULTICAST] multicast link start thread\n");
|
||||
|
||||
if (pthread_create (&main_loop_thread, NULL, multicast_link_main_loop,
|
||||
NULL) != 0) {
|
||||
LOG_E(EMU, "[MULTICAST LINK] Error in pthread_create (%d:%s)\n",
|
||||
LOG_E(PHY, "[MULTICAST LINK] Error in pthread_create (%d:%s)\n",
|
||||
errno, strerror(errno));
|
||||
exit(EXIT_FAILURE);
|
||||
} else {
|
||||
pthread_detach(main_loop_thread); // disassociate from parent
|
||||
LOG_I(EMU, "[MULTICAST LINK] Thread detached\n");
|
||||
LOG_I(PHY, "[MULTICAST LINK] Thread detached\n");
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
@@ -521,6 +521,7 @@ int main(int argc, char **argv)
|
||||
int k,i,j,aa;
|
||||
int re;
|
||||
|
||||
|
||||
int s,Kr,Kr_bytes;
|
||||
|
||||
double SNR,snr0=-2.0,snr1,rate = 0;
|
||||
@@ -1137,10 +1138,10 @@ int main(int argc, char **argv)
|
||||
}
|
||||
else {
|
||||
eNB->te = dlsch_encoding_2threads;
|
||||
extern void init_td_thread(PHY_VARS_eNB *, pthread_attr_t *);
|
||||
extern void init_te_thread(PHY_VARS_eNB *, pthread_attr_t *);
|
||||
init_td_thread(eNB,NULL);
|
||||
init_te_thread(eNB,NULL);
|
||||
extern void init_td_thread(PHY_VARS_eNB *);
|
||||
extern void init_te_thread(PHY_VARS_eNB *);
|
||||
init_td_thread(eNB);
|
||||
init_te_thread(eNB);
|
||||
}
|
||||
|
||||
// callback functions required for phy_procedures_tx
|
||||
@@ -1306,7 +1307,9 @@ int main(int argc, char **argv)
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
UE->pdcch_vars[UE->current_thread_id[subframe]][0]->crnti = n_rnti;
|
||||
UE->n_connected_eNB = 1;
|
||||
|
||||
printf("Allocating %dx%d eNB->UE channel descriptor\n",eNB->frame_parms.nb_antennas_tx,UE->frame_parms.nb_antennas_rx);
|
||||
eNB2UE[0] = new_channel_desc_scm(eNB->frame_parms.nb_antennas_tx,
|
||||
@@ -1318,8 +1321,10 @@ int main(int argc, char **argv)
|
||||
rx_sample_offset,
|
||||
0);
|
||||
|
||||
reset_meas(&eNB2UE[0]->random_channel);
|
||||
reset_meas(&eNB2UE[0]->interp_time);
|
||||
if(num_rounds>1) {
|
||||
for(n=1; n<4; n++)
|
||||
for(n=1; n<4; n++) {
|
||||
eNB2UE[n] = new_channel_desc_scm(eNB->frame_parms.nb_antennas_tx,
|
||||
UE->frame_parms.nb_antennas_rx,
|
||||
channel_model,
|
||||
@@ -1328,8 +1333,11 @@ int main(int argc, char **argv)
|
||||
forgetting_factor,
|
||||
rx_sample_offset,
|
||||
0);
|
||||
reset_meas(&eNB2UE[n]->random_channel);
|
||||
reset_meas(&eNB2UE[n]->interp_time);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (eNB2UE[0]==NULL) {
|
||||
printf("Problem generating channel model. Exiting.\n");
|
||||
exit(-1);
|
||||
|
||||
@@ -126,7 +126,6 @@ fill_nfapi_ulsch_config_request(nfapi_ul_config_request_pdu_t *ul_config_pdu,
|
||||
{
|
||||
memset((void *) ul_config_pdu, 0, sizeof(nfapi_ul_config_request_pdu_t));
|
||||
|
||||
// printf("filling ul_config_pdu: modulation type %d, rvidx %d\n",modulation_type,redundancy_version);
|
||||
|
||||
ul_config_pdu->pdu_type = NFAPI_UL_CONFIG_ULSCH_PDU_TYPE;
|
||||
ul_config_pdu->pdu_size = (uint8_t) (2 + sizeof(nfapi_ul_config_ulsch_pdu));
|
||||
@@ -147,6 +146,8 @@ fill_nfapi_ulsch_config_request(nfapi_ul_config_request_pdu_t *ul_config_pdu,
|
||||
ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.n_srs = n_srs;
|
||||
ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.size = size;
|
||||
|
||||
//printf("Filling ul_config_pdu : Q %d, TBS %d, rv %d, ndi %d\n", modulation_type,size,redundancy_version,new_data_indication);
|
||||
|
||||
if (cqi_req == 1) {
|
||||
// Add CQI portion
|
||||
ul_config_pdu->pdu_type = NFAPI_UL_CONFIG_ULSCH_CQI_RI_PDU_TYPE;
|
||||
@@ -183,6 +184,7 @@ void fill_ulsch_dci(PHY_VARS_eNB *eNB,
|
||||
int mcs,
|
||||
int modulation_type,
|
||||
int ndi,
|
||||
int TBS,
|
||||
int cqi_flag,
|
||||
uint8_t beta_CQI,
|
||||
uint8_t beta_RI,
|
||||
@@ -191,7 +193,7 @@ void fill_ulsch_dci(PHY_VARS_eNB *eNB,
|
||||
nfapi_ul_config_request_body_t *ul_req=&sched_resp->UL_req->ul_config_request_body;
|
||||
int harq_pid = ((frame*10)+subframe)&7;
|
||||
|
||||
// printf("ulsch in frame %d, subframe %d => harq_pid %d, mcs %d, ndi %d\n",frame,subframe,harq_pid,mcs,ndi);
|
||||
//printf("ulsch in frame %d, subframe %d => harq_pid %d, mcs %d, ndi %d\n",frame,subframe,harq_pid,mcs,ndi);
|
||||
|
||||
switch (eNB->frame_parms.N_RB_UL) {
|
||||
case 6:
|
||||
@@ -297,7 +299,7 @@ void fill_ulsch_dci(PHY_VARS_eNB *eNB,
|
||||
0, // ul_tx_mode
|
||||
0, // current_tx_nb
|
||||
0, // n_srs
|
||||
get_TBS_UL(mcs,nb_rb));
|
||||
TBS);
|
||||
|
||||
sched_resp->UL_req->header.message_id = NFAPI_UL_CONFIG_REQUEST;
|
||||
ul_req->number_of_pdus=1;
|
||||
@@ -446,14 +448,14 @@ int main(int argc, char **argv)
|
||||
"cannot load configuration module, exiting\n");
|
||||
|
||||
logInit();
|
||||
/*
|
||||
|
||||
// enable these lines if you need debug info
|
||||
// however itti will catch all signals, so ctrl-c won't work anymore
|
||||
// alternatively you can disable ITTI completely in CMakeLists.txt
|
||||
itti_init(TASK_MAX, THREAD_MAX, MESSAGES_ID_MAX, tasks_info, messages_info, messages_definition_xml, NULL);
|
||||
set_comp_log(PHY,LOG_DEBUG,LOG_MED,1);
|
||||
set_glog(LOG_DEBUG,LOG_MED);
|
||||
*/
|
||||
//itti_init(TASK_MAX, THREAD_MAX, MESSAGES_ID_MAX, tasks_info, messages_info, messages_definition_xml, NULL);
|
||||
//set_comp_log(PHY,LOG_DEBUG,LOG_MED,1);
|
||||
//set_glog(LOG_DEBUG,LOG_MED);
|
||||
|
||||
|
||||
while ((c = getopt (argc, argv, "hapZEbm:n:Y:X:x:s:w:e:q:d:D:O:c:r:i:f:y:c:oA:C:R:g:N:l:S:T:QB:PI:LF")) != -1) {
|
||||
switch (c) {
|
||||
@@ -887,9 +889,9 @@ int main(int argc, char **argv)
|
||||
|
||||
if (parallel_flag == 1) {
|
||||
extern void init_fep_thread(PHY_VARS_eNB *, pthread_attr_t *);
|
||||
extern void init_td_thread(PHY_VARS_eNB *, pthread_attr_t *);
|
||||
extern void init_td_thread(PHY_VARS_eNB *);
|
||||
init_fep_thread(eNB,NULL);
|
||||
init_td_thread(eNB,NULL);
|
||||
init_td_thread(eNB);
|
||||
}
|
||||
// Create transport channel structures for 2 transport blocks (MIMO)
|
||||
for (i=0; i<2; i++) {
|
||||
@@ -1142,7 +1144,7 @@ int main(int argc, char **argv)
|
||||
else if (mcs < 21) modulation_type = 4;
|
||||
else if (mcs < 29) modulation_type = 6;
|
||||
|
||||
fill_ulsch_dci(eNB,proc_rxtx->frame_rx,subframe,&sched_resp,14,(void*)&UL_alloc_pdu,first_rb,nb_rb,(round==0)?mcs:(28+rvidx[round]),modulation_type,ndi,cqi_flag,beta_CQI,beta_RI,cqi_size);
|
||||
fill_ulsch_dci(eNB,proc_rxtx->frame_rx,subframe,&sched_resp,14,(void*)&UL_alloc_pdu,first_rb,nb_rb,(round==0)?mcs:(28+rvidx[round]),modulation_type,ndi,get_TBS_UL(mcs,nb_rb),cqi_flag,beta_CQI,beta_RI,cqi_size);
|
||||
|
||||
UE->ulsch_Msg3_active[eNB_id] = 0;
|
||||
UE->ul_power_control_dedicated[eNB_id].accumulationEnabled=1;
|
||||
@@ -1324,7 +1326,6 @@ int main(int argc, char **argv)
|
||||
ru->feprx(ru);
|
||||
phy_procedures_eNB_uespec_RX(eNB,proc_rxtx);
|
||||
|
||||
|
||||
if (cqi_flag > 0) {
|
||||
cqi_error = 0;
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
*/
|
||||
|
||||
openair0_device openair0;
|
||||
int oai_exit=0;
|
||||
volatile int oai_exit=0;
|
||||
|
||||
void exit_fun(const char *s) { exit(-1); }
|
||||
|
||||
|
||||
@@ -38,12 +38,7 @@ void adc(double *r_re[2],
|
||||
for (aa=0; aa<nb_rx_antennas; aa++) {
|
||||
((short *)output[aa])[((i+output_offset)<<1)] = (short)(r_re[aa][i+input_offset]*gain);
|
||||
((short *)output[aa])[1+((i+output_offset)<<1)] = (short)(r_im[aa][i+input_offset]*gain);
|
||||
|
||||
if ((r_re[aa][i+input_offset]*gain) > 30000) {
|
||||
//("Adc outputs %d %e %d \n",i,((short *)output[0])[((i+output_offset)<<1)], ((i+output_offset)<<1) );
|
||||
}
|
||||
}
|
||||
|
||||
//printf("Adc outputs %d %e %d \n",i,((short *)output[0])[((i+output_offset)<<1)], ((i+output_offset)<<1) );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
#include "rf.h"
|
||||
void dac(double *s_re[2],
|
||||
double *s_im[2],
|
||||
uint32_t **input,
|
||||
int32_t **input,
|
||||
uint32_t input_offset,
|
||||
uint32_t nb_tx_antennas,
|
||||
uint32_t length,
|
||||
@@ -76,7 +76,7 @@ void dac(double *s_re[2],
|
||||
|
||||
double dac_fixed_gain(double *s_re[2],
|
||||
double *s_im[2],
|
||||
uint32_t **input,
|
||||
int32_t **input,
|
||||
uint32_t input_offset,
|
||||
uint32_t nb_tx_antennas,
|
||||
uint32_t length,
|
||||
|
||||
@@ -69,14 +69,14 @@ void adc(double *r_re[2],
|
||||
double *r_im[2],
|
||||
unsigned int input_offset,
|
||||
unsigned int output_offset,
|
||||
int **output,
|
||||
int32_t **output,
|
||||
unsigned int nb_rx_antennas,
|
||||
unsigned int length,
|
||||
unsigned char B);
|
||||
|
||||
void dac(double *s_re[2],
|
||||
double *s_im[2],
|
||||
unsigned int **input,
|
||||
int32_t **input,
|
||||
unsigned int input_offset,
|
||||
unsigned int nb_tx_antennas,
|
||||
unsigned int length,
|
||||
@@ -87,7 +87,7 @@ void dac(double *s_re[2],
|
||||
|
||||
double dac_fixed_gain(double *s_re[2],
|
||||
double *s_im[2],
|
||||
unsigned int **input,
|
||||
int32_t **input,
|
||||
unsigned int input_offset,
|
||||
unsigned int nb_tx_antennas,
|
||||
unsigned int length,
|
||||
|
||||
@@ -0,0 +1,487 @@
|
||||
/*
|
||||
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The OpenAirInterface Software Alliance licenses this file to You under
|
||||
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
|
||||
* except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.openairinterface.org/?page_id=698
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*-------------------------------------------------------------------------------
|
||||
* For more information about the OpenAirInterface (OAI) Software Alliance:
|
||||
* contact@openairinterface.org
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
#include <math.h>
|
||||
#include <unistd.h>
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
#include <time.h>
|
||||
|
||||
#include "SIMULATION/TOOLS/sim.h"
|
||||
#include "SIMULATION/RF/rf.h"
|
||||
#include "PHY/types.h"
|
||||
#include "PHY/defs_eNB.h"
|
||||
#include "PHY/phy_extern.h"
|
||||
#include "PHY/phy_extern_ue.h"
|
||||
|
||||
#include "LAYER2/MAC/mac.h"
|
||||
#include "LAYER2/MAC/mac_extern.h"
|
||||
#include "UTIL/LOG/log_if.h"
|
||||
#include "UTIL/LOG/log_extern.h"
|
||||
#include "RRC/LTE/rrc_extern.h"
|
||||
#include "PHY_INTERFACE/phy_interface_extern.h"
|
||||
#include "UTIL/OCG/OCG.h"
|
||||
#include "UTIL/OPT/opt.h" // to test OPT
|
||||
|
||||
#include "UTIL/FIFO/types.h"
|
||||
|
||||
#define RF
|
||||
//#define DEBUG_SIM
|
||||
|
||||
//#undef LOG_D
|
||||
//#define LOG_D(A,B,C...) printf(B,C)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void do_DL_sig(sim_t *sim,
|
||||
uint16_t subframe,
|
||||
uint32_t offset,
|
||||
uint32_t length,
|
||||
uint8_t abstraction_flag,LTE_DL_FRAME_PARMS *ue_frame_parms,
|
||||
uint8_t UE_id,
|
||||
int CC_id)
|
||||
{
|
||||
|
||||
int32_t **txdata,**rxdata;
|
||||
|
||||
uint32_t ru_id=0;
|
||||
double tx_pwr;
|
||||
double rx_pwr;
|
||||
int32_t rx_pwr2;
|
||||
uint32_t i,aa;
|
||||
uint32_t sf_offset;
|
||||
|
||||
uint8_t hold_channel=0;
|
||||
uint8_t nb_antennas_rx = sim->RU2UE[0][0][CC_id]->nb_rx; // number of rx antennas at UE
|
||||
uint8_t nb_antennas_tx = sim->RU2UE[0][0][CC_id]->nb_tx; // number of tx antennas at eNB
|
||||
|
||||
double s_re0[30720];
|
||||
double s_re1[30720];
|
||||
double *s_re[2];
|
||||
double s_im0[30720];
|
||||
double s_im1[30720];
|
||||
double *s_im[2];
|
||||
double r_re00[30720];
|
||||
double r_re01[30720];
|
||||
double *r_re0[2];
|
||||
double r_im00[30720];
|
||||
double r_im01[30720];
|
||||
double *r_im0[2];
|
||||
LTE_DL_FRAME_PARMS *frame_parms;
|
||||
|
||||
s_re[0] = s_re0;
|
||||
s_im[0] = s_im0;
|
||||
s_re[1] = s_re1;
|
||||
s_im[1] = s_im1;
|
||||
|
||||
r_re0[0] = r_re00;
|
||||
r_im0[0] = r_im00;
|
||||
r_re0[1] = r_re01;
|
||||
r_im0[1] = r_im01;
|
||||
|
||||
if (subframe==0)
|
||||
hold_channel = 0;
|
||||
else
|
||||
hold_channel = 1;
|
||||
|
||||
pthread_mutex_lock(&sim->RU_output_mutex[UE_id]);
|
||||
|
||||
if (sim->RU_output_mask[UE_id] == 0) { // This is the first eNodeB for this UE, clear the buffer
|
||||
for (aa=0; aa<nb_antennas_rx; aa++) {
|
||||
memset((void*)sim->r_re_DL[UE_id][aa],0,(RC.ru[0]->frame_parms.samples_per_tti)*sizeof(double));
|
||||
memset((void*)sim->r_im_DL[UE_id][aa],0,(RC.ru[0]->frame_parms.samples_per_tti)*sizeof(double));
|
||||
}
|
||||
}
|
||||
pthread_mutex_unlock(&sim->RU_output_mutex[UE_id]);
|
||||
|
||||
for (ru_id=0; ru_id<RC.nb_RU; ru_id++) {
|
||||
txdata = RC.ru[ru_id]->common.txdata;
|
||||
frame_parms = &RC.ru[ru_id]->frame_parms;
|
||||
|
||||
// sf_offset = (subframe*frame_parms->samples_per_tti) + offset;
|
||||
sf_offset = (subframe*frame_parms->samples_per_tti);
|
||||
LOG_D(OCM,">>>>>>>>>>>>>>>>>TXPATH: RU %d : DL_sig reading TX for subframe %d (sf_offset %d, length %d) from %p\n",ru_id,subframe,sf_offset,length,txdata[0]+sf_offset);
|
||||
int length_meas = frame_parms->ofdm_symbol_size;
|
||||
if (sf_offset+length <= frame_parms->samples_per_tti*10) {
|
||||
|
||||
tx_pwr = dac_fixed_gain(s_re,
|
||||
s_im,
|
||||
txdata,
|
||||
sf_offset+offset,
|
||||
nb_antennas_tx,
|
||||
length,
|
||||
sf_offset,
|
||||
length_meas,
|
||||
14,
|
||||
frame_parms->pdsch_config_common.referenceSignalPower, // dBm/RE
|
||||
0,
|
||||
&sim->ru_amp[ru_id],
|
||||
frame_parms->N_RB_DL*12);
|
||||
|
||||
}
|
||||
else {
|
||||
tx_pwr = dac_fixed_gain(s_re,
|
||||
s_im,
|
||||
txdata,
|
||||
sf_offset,
|
||||
nb_antennas_tx,
|
||||
(frame_parms->samples_per_tti*10)-sf_offset,
|
||||
sf_offset,
|
||||
length_meas,
|
||||
14,
|
||||
frame_parms->pdsch_config_common.referenceSignalPower, // dBm/RE
|
||||
0,
|
||||
&sim->ru_amp[ru_id],
|
||||
frame_parms->N_RB_DL*12);
|
||||
|
||||
tx_pwr = dac_fixed_gain(s_re,
|
||||
s_im,
|
||||
txdata,
|
||||
sf_offset,
|
||||
nb_antennas_tx,
|
||||
length+sf_offset-(frame_parms->samples_per_tti*10),
|
||||
sf_offset,
|
||||
length_meas,
|
||||
14,
|
||||
frame_parms->pdsch_config_common.referenceSignalPower, // dBm/RE
|
||||
0,
|
||||
&sim->ru_amp[ru_id],
|
||||
frame_parms->N_RB_DL*12);
|
||||
}
|
||||
#ifdef DEBUG_SIM
|
||||
LOG_D(OCM,"[SIM][DL] subframe %d: txp (time) %d dB\n",
|
||||
subframe,dB_fixed(signal_energy(&txdata[0][sf_offset],length_meas)));
|
||||
|
||||
LOG_D(OCM,"[SIM][DL] RU %d (CCid %d): tx_pwr %.1f dBm/RE (target %d dBm/RE), for subframe %d\n",
|
||||
ru_id,CC_id,
|
||||
10*log10(tx_pwr),
|
||||
frame_parms->pdsch_config_common.referenceSignalPower,
|
||||
subframe);
|
||||
|
||||
#endif
|
||||
tx_pwr = signal_energy_fp(s_re,s_im,nb_antennas_tx,
|
||||
length<length_meas?length:length_meas,
|
||||
0)/(12.0*frame_parms->N_RB_DL);
|
||||
|
||||
//RU2UE[eNB_id][UE_id]->path_loss_dB = 0;
|
||||
multipath_channel(sim->RU2UE[ru_id][UE_id][CC_id],s_re,s_im,r_re0,r_im0,
|
||||
length,hold_channel);
|
||||
#ifdef DEBUG_SIM
|
||||
rx_pwr = signal_energy_fp2(sim->RU2UE[ru_id][UE_id][CC_id]->ch[0],
|
||||
sim->RU2UE[ru_id][UE_id][CC_id]->channel_length)*sim->RU2UE[ru_id][UE_id][CC_id]->channel_length;
|
||||
LOG_D(OCM,"[SIM][DL] Channel RU %d => UE %d (CCid %d): Channel gain %f dB (%f)\n",ru_id,UE_id,CC_id,10*log10(rx_pwr),rx_pwr);
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef DEBUG_SIM
|
||||
|
||||
for (i=0; i<sim->RU2UE[ru_id][UE_id][CC_id]->channel_length; i++)
|
||||
LOG_D(OCM,"channel(%d,%d)[%d] : (%f,%f)\n",ru_id,UE_id,i,sim->RU2UE[ru_id][UE_id][CC_id]->ch[0][i].x,sim->RU2UE[ru_id][UE_id][CC_id]->ch[0][i].y);
|
||||
|
||||
#endif
|
||||
|
||||
LOG_D(OCM,"[SIM][DL] Channel RU %d => UE %d (CCid %d): tx_power %.1f dBm/RE, path_loss %1.f dB\n",
|
||||
ru_id,UE_id,CC_id,
|
||||
(double)frame_parms->pdsch_config_common.referenceSignalPower,
|
||||
sim->RU2UE[ru_id][UE_id][CC_id]->path_loss_dB);
|
||||
|
||||
#ifdef DEBUG_SIM
|
||||
rx_pwr = signal_energy_fp(r_re0,r_im0,nb_antennas_rx,
|
||||
length<length_meas?length:length_meas,
|
||||
0)/(12.0*frame_parms->N_RB_DL);
|
||||
LOG_D(OCM,"[SIM][DL] UE %d : rx_pwr %f dBm/RE (%f dBm RSSI,tx %f dB)for subframe %d (length %d)\n",UE_id,
|
||||
10*log10(rx_pwr),
|
||||
10*log10(rx_pwr*(double)frame_parms->N_RB_DL*12),
|
||||
10*log10(tx_pwr),subframe,
|
||||
length<length_meas?length:length_meas);
|
||||
|
||||
|
||||
LOG_D(OCM,"[SIM][DL] UE %d : rx_pwr (noise) -132 dBm/RE (N0fs = %.1f dBm, N0B = %.1f dBm) for subframe %d\n",
|
||||
UE_id,
|
||||
10*log10(sim->RU2UE[ru_id][UE_id][CC_id]->sampling_rate*1e6)-174,
|
||||
10*log10(sim->RU2UE[ru_id][UE_id][CC_id]->sampling_rate*1e6*12*frame_parms->N_RB_DL/(double)frame_parms->ofdm_symbol_size)-174,
|
||||
subframe);
|
||||
#endif
|
||||
|
||||
if (sim->RU2UE[ru_id][UE_id][CC_id]->first_run == 1)
|
||||
sim->RU2UE[ru_id][UE_id][CC_id]->first_run = 0;
|
||||
|
||||
|
||||
// RF model
|
||||
#ifdef DEBUG_SIM
|
||||
LOG_D(OCM,"[SIM][DL] UE %d (CCid %d): rx_gain %d dB (-ADC %f) for subframe %d\n",UE_id,CC_id,PHY_vars_UE_g[UE_id][CC_id]->rx_total_gain_dB,
|
||||
PHY_vars_UE_g[UE_id][CC_id]->rx_total_gain_dB-66.227,subframe);
|
||||
#endif
|
||||
|
||||
rf_rx_simple(r_re0,
|
||||
r_im0,
|
||||
nb_antennas_rx,
|
||||
length,
|
||||
1e3/sim->RU2UE[ru_id][UE_id][CC_id]->sampling_rate, // sampling time (ns)
|
||||
(double)PHY_vars_UE_g[UE_id][CC_id]->rx_total_gain_dB - 66.227); // rx_gain (dB) (66.227 = 20*log10(pow2(11)) = gain from the adc that will be applied later)
|
||||
|
||||
#ifdef DEBUG_SIM
|
||||
rx_pwr = signal_energy_fp(r_re0,r_im0,
|
||||
nb_antennas_rx,
|
||||
length<length_meas?length:length_meas,
|
||||
0)/(12.0*frame_parms->N_RB_DL);
|
||||
LOG_D(OCM,"[SIM][DL] UE %d : ADC in (RU %d) %f dBm/RE for subframe %d\n",
|
||||
UE_id,ru_id,
|
||||
10*log10(rx_pwr),subframe);
|
||||
#endif
|
||||
|
||||
|
||||
pthread_mutex_lock(&sim->RU_output_mutex[UE_id]);
|
||||
for (i=0; i<frame_parms->samples_per_tti; i++) {
|
||||
for (aa=0; aa<nb_antennas_rx; aa++) {
|
||||
sim->r_re_DL[UE_id][aa][i]+=r_re0[aa][i];
|
||||
sim->r_im_DL[UE_id][aa][i]+=r_im0[aa][i];
|
||||
}
|
||||
}
|
||||
sim->RU_output_mask[UE_id] |= (1<<ru_id);
|
||||
if (sim->RU_output_mask[UE_id] == (1<<RC.nb_RU)-1) {
|
||||
sim->RU_output_mask[UE_id]=0;
|
||||
|
||||
|
||||
|
||||
double *r_re_p[2] = {sim->r_re_DL[UE_id][0],sim->r_re_DL[UE_id][1]};
|
||||
double *r_im_p[2] = {sim->r_im_DL[UE_id][0],sim->r_im_DL[UE_id][1]};
|
||||
|
||||
#ifdef DEBUG_SIM
|
||||
rx_pwr = signal_energy_fp(r_re_p,r_im_p,nb_antennas_rx,length<length_meas?length:length_meas,0)/(12.0*frame_parms->N_RB_DL);
|
||||
LOG_D(OCM,"[SIM][DL] UE %d : ADC in %f dBm/RE for subframe %d\n",UE_id,10*log10(rx_pwr),subframe);
|
||||
#endif
|
||||
|
||||
rxdata = PHY_vars_UE_g[UE_id][CC_id]->common_vars.rxdata;
|
||||
sf_offset = (subframe*frame_parms->samples_per_tti)+offset;
|
||||
|
||||
|
||||
adc(r_re_p,
|
||||
r_im_p,
|
||||
0,
|
||||
sf_offset,
|
||||
rxdata,
|
||||
nb_antennas_rx,
|
||||
length,
|
||||
12);
|
||||
|
||||
#ifdef DEBUG_SIM
|
||||
rx_pwr2 = signal_energy(rxdata[0]+sf_offset,length<length_meas?length:length_meas)/(12.0*frame_parms->N_RB_DL);
|
||||
LOG_D(OCM,"[SIM][DL] UE %d : rx_pwr (ADC out) %f dB/RE (%d) for subframe %d, writing to %p, length %d\n",UE_id, 10*log10((double)rx_pwr2),rx_pwr2,subframe,rxdata,length<length_meas?length:length_meas);
|
||||
LOG_D(OCM,"[SIM][DL] UE %d : rx_pwr (ADC out) %f dB for subframe %d\n",UE_id,10*log10((double)rx_pwr2*12*frame_parms->N_RB_DL) ,subframe);
|
||||
#else
|
||||
UNUSED_VARIABLE(rx_pwr2);
|
||||
UNUSED_VARIABLE(tx_pwr);
|
||||
UNUSED_VARIABLE(rx_pwr);
|
||||
#endif
|
||||
|
||||
} // RU_output_mask
|
||||
pthread_mutex_unlock(&sim->RU_output_mutex[UE_id]);
|
||||
} // ru_id
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void do_UL_sig(sim_t *sim,
|
||||
uint16_t subframe,uint8_t abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms,
|
||||
uint32_t frame,int ru_id,uint8_t CC_id)
|
||||
{
|
||||
|
||||
int32_t **txdata,**rxdata;
|
||||
uint8_t UE_id=0;
|
||||
|
||||
uint8_t nb_antennas_rx = sim->UE2RU[0][0][CC_id]->nb_rx; // number of rx antennas at eNB
|
||||
uint8_t nb_antennas_tx = sim->UE2RU[0][0][CC_id]->nb_tx; // number of tx antennas at UE
|
||||
|
||||
double tx_pwr, rx_pwr;
|
||||
int32_t rx_pwr2;
|
||||
uint32_t i,aa;
|
||||
uint32_t sf_offset,sf_offset_tdd;
|
||||
|
||||
uint8_t hold_channel=0;
|
||||
|
||||
double s_re0[30720];
|
||||
double s_re1[30720];
|
||||
double *s_re[2];
|
||||
double s_im0[30720];
|
||||
double s_im1[30720];
|
||||
double *s_im[2];
|
||||
double r_re00[30720];
|
||||
double r_re01[30720];
|
||||
double *r_re0[2];
|
||||
double r_im00[30720];
|
||||
double r_im01[30720];
|
||||
double *r_im0[2];
|
||||
|
||||
s_re[0] = s_re0;
|
||||
s_im[0] = s_im0;
|
||||
s_re[1] = s_re1;
|
||||
s_im[1] = s_im1;
|
||||
|
||||
r_re0[0] = r_re00;
|
||||
r_im0[0] = r_im00;
|
||||
r_re0[1] = r_re01;
|
||||
r_im0[1] = r_im01;
|
||||
|
||||
pthread_mutex_lock(&sim->UE_output_mutex[ru_id]);
|
||||
// Clear RX signal for eNB = eNB_id
|
||||
for (i=0; i<frame_parms->samples_per_tti; i++) {
|
||||
for (aa=0; aa<nb_antennas_rx; aa++) {
|
||||
sim->r_re_UL[ru_id][aa][i]=0.0;
|
||||
sim->r_im_UL[ru_id][aa][i]=0.0;
|
||||
}
|
||||
}
|
||||
pthread_mutex_unlock(&sim->UE_output_mutex[ru_id]);
|
||||
|
||||
// Compute RX signal for eNB = eNB_id
|
||||
for (UE_id=0; UE_id<NB_UE_INST; UE_id++) {
|
||||
|
||||
txdata = PHY_vars_UE_g[UE_id][CC_id]->common_vars.txdata;
|
||||
AssertFatal(txdata != NULL,"txdata is null\n");
|
||||
|
||||
sf_offset = subframe*frame_parms->samples_per_tti;
|
||||
if (subframe>0) sf_offset_tdd = sf_offset - PHY_vars_UE_g[UE_id][CC_id]->N_TA_offset;
|
||||
else sf_offset_tdd = sf_offset;
|
||||
|
||||
LOG_D(OCM,"txdata for subframe %d (%d), power %d\n",subframe,sf_offset_tdd,dB_fixed(signal_energy(&txdata[0][sf_offset_tdd],frame_parms->samples_per_tti)));
|
||||
|
||||
if (((double)PHY_vars_UE_g[UE_id][CC_id]->tx_power_dBm[subframe] +
|
||||
sim->UE2RU[UE_id][ru_id][CC_id]->path_loss_dB) <= -125.0) {
|
||||
// don't simulate a UE that is too weak
|
||||
LOG_D(OCM,"[SIM][UL] ULPOWERS UE %d tx_pwr %d dBm (num_RE %d) for subframe %d (sf_offset %d,sf_offset_tdd %d)\n",
|
||||
UE_id,
|
||||
PHY_vars_UE_g[UE_id][CC_id]->tx_power_dBm[subframe],
|
||||
PHY_vars_UE_g[UE_id][CC_id]->tx_total_RE[subframe],
|
||||
subframe,sf_offset,sf_offset_tdd);
|
||||
} else {
|
||||
tx_pwr = dac_fixed_gain((double**)s_re,
|
||||
(double**)s_im,
|
||||
txdata,
|
||||
sf_offset_tdd,
|
||||
nb_antennas_tx,
|
||||
frame_parms->samples_per_tti,
|
||||
sf_offset_tdd,
|
||||
frame_parms->ofdm_symbol_size,
|
||||
14,
|
||||
(double)PHY_vars_UE_g[UE_id][CC_id]->tx_power_dBm[subframe]-10*log10((double)PHY_vars_UE_g[UE_id][CC_id]->tx_total_RE[subframe]),
|
||||
1,
|
||||
NULL,
|
||||
PHY_vars_UE_g[UE_id][CC_id]->tx_total_RE[subframe]); // This make the previous argument the total power
|
||||
LOG_D(OCM,"[SIM][UL] ULPOWERS UE %d tx_pwr %f dBm (target %d dBm, num_RE %d) for subframe %d (sf_offset %d,sf_offset_tdd %d)\n",
|
||||
UE_id,
|
||||
10*log10(tx_pwr*PHY_vars_UE_g[UE_id][CC_id]->tx_total_RE[subframe]),
|
||||
PHY_vars_UE_g[UE_id][CC_id]->tx_power_dBm[subframe],
|
||||
PHY_vars_UE_g[UE_id][CC_id]->tx_total_RE[subframe],
|
||||
subframe,sf_offset,sf_offset_tdd);
|
||||
|
||||
|
||||
multipath_channel(sim->UE2RU[UE_id][ru_id][CC_id],s_re,s_im,r_re0,r_im0,
|
||||
frame_parms->samples_per_tti,hold_channel);
|
||||
|
||||
|
||||
rx_pwr = signal_energy_fp2(sim->UE2RU[UE_id][ru_id][CC_id]->ch[0],
|
||||
sim->UE2RU[UE_id][ru_id][CC_id]->channel_length)*sim->UE2RU[UE_id][ru_id][CC_id]->channel_length;
|
||||
|
||||
LOG_D(OCM,"[SIM][UL] subframe %d Channel UE %d => RU %d : %f dB (hold %d,length %d, PL %f)\n",subframe,UE_id,ru_id,10*log10(rx_pwr),
|
||||
hold_channel,sim->UE2RU[UE_id][ru_id][CC_id]->channel_length,
|
||||
sim->UE2RU[UE_id][ru_id][CC_id]->path_loss_dB);
|
||||
|
||||
rx_pwr = signal_energy_fp(r_re0,r_im0,nb_antennas_rx,frame_parms->samples_per_tti,0);
|
||||
LOG_D(OCM,"[SIM][UL] RU %d (%d/%d rx antennas) : rx_pwr %f dBm (tx_pwr - PL %f) for subframe %d, sptti %d\n",
|
||||
ru_id,nb_antennas_rx,sim->UE2RU[UE_id][ru_id][CC_id]->nb_rx,10*log10(rx_pwr),10*log10(tx_pwr*PHY_vars_UE_g[UE_id][CC_id]->tx_total_RE[subframe])+sim->UE2RU[UE_id][ru_id][CC_id]->path_loss_dB,subframe,frame_parms->samples_per_tti);
|
||||
/*
|
||||
if (abs(10*log10(rx_pwr)-10*log10(tx_pwr*PHY_vars_UE_g[UE_id][CC_id]->tx_total_RE[subframe])-UE2RU[UE_id][ru_id][CC_id]->path_loss_dB)>3) {
|
||||
write_output("txsig_re.m","s_re",s_re[0],frame_parms->samples_per_tti,1,7);
|
||||
write_output("txsig_im.m","s_im",s_im[0],frame_parms->samples_per_tti,1,7);
|
||||
write_output("rxsig_re.m","r_re",r_re0[0],frame_parms->samples_per_tti,1,7);
|
||||
write_output("rxsig_im.m","r_im",r_im0[0],frame_parms->samples_per_tti,1,7);
|
||||
exit(-1);
|
||||
}*/
|
||||
|
||||
if (sim->UE2RU[UE_id][ru_id][CC_id]->first_run == 1)
|
||||
sim->UE2RU[UE_id][ru_id][CC_id]->first_run = 0;
|
||||
|
||||
|
||||
pthread_mutex_lock(&sim->UE_output_mutex[ru_id]);
|
||||
for (aa=0; aa<nb_antennas_rx; aa++) {
|
||||
for (i=0; i<frame_parms->samples_per_tti; i++) {
|
||||
sim->r_re_UL[ru_id][aa][i]+=r_re0[aa][i];
|
||||
sim->r_im_UL[ru_id][aa][i]+=r_im0[aa][i];
|
||||
}
|
||||
}
|
||||
pthread_mutex_unlock(&sim->UE_output_mutex[ru_id]);
|
||||
}
|
||||
} //UE_id
|
||||
|
||||
double *r_re_p[2] = {sim->r_re_UL[ru_id][0],sim->r_re_UL[ru_id][1]};
|
||||
double *r_im_p[2] = {sim->r_im_UL[ru_id][0],sim->r_im_UL[ru_id][1]};
|
||||
|
||||
rx_pwr = signal_energy_fp(r_re_p,r_im_p,nb_antennas_rx,frame_parms->samples_per_tti,0);
|
||||
LOG_D(OCM,"[SIM][UL] RU %d (%d/%d rx antennas) : rx_pwr %f dBm (before RF) for subframe %d, gain %f\n",
|
||||
ru_id,nb_antennas_rx,nb_antennas_rx,10*log10(rx_pwr),subframe,
|
||||
(double)RC.ru[ru_id]->max_rxgain-(double)RC.ru[ru_id]->att_rx - 66.227);
|
||||
rf_rx_simple(r_re_p,
|
||||
r_im_p,
|
||||
nb_antennas_rx,
|
||||
frame_parms->samples_per_tti,
|
||||
1e3/sim->UE2RU[0][ru_id][CC_id]->sampling_rate, // sampling time (ns)
|
||||
(double)RC.ru[ru_id]->max_rxgain-(double)RC.ru[ru_id]->att_rx - 66.227); // rx_gain (dB) (66.227 = 20*log10(pow2(11)) = gain from the adc that will be applied later)
|
||||
|
||||
#ifdef DEBUG_SIM
|
||||
rx_pwr = signal_energy_fp(r_re_p,r_im_p,nb_antennas_rx,frame_parms->samples_per_tti,0);//*(double)frame_parms->ofdm_symbol_size/(12.0*frame_parms->N_RB_DL;
|
||||
LOG_D(OCM,"[SIM][UL] rx_pwr (ADC in) %f dB for subframe %d (rx_gain %f)\n",10*log10(rx_pwr),subframe,
|
||||
(double)RC.ru[ru_id]->max_rxgain-(double)RC.ru[ru_id]->att_rx);
|
||||
#endif
|
||||
|
||||
rxdata = RC.ru[ru_id]->common.rxdata;
|
||||
sf_offset = subframe*frame_parms->samples_per_tti;
|
||||
if (subframe>0) sf_offset_tdd = sf_offset - RC.ru[ru_id]->N_TA_offset;
|
||||
else sf_offset_tdd = sf_offset;
|
||||
|
||||
|
||||
adc(r_re_p,
|
||||
r_im_p,
|
||||
0,
|
||||
sf_offset_tdd,
|
||||
rxdata,
|
||||
nb_antennas_rx,
|
||||
frame_parms->samples_per_tti,
|
||||
12);
|
||||
|
||||
#ifdef DEBUG_SIM
|
||||
rx_pwr2 = signal_energy(rxdata[0]+sf_offset_tdd,frame_parms->samples_per_tti)*(double)frame_parms->ofdm_symbol_size/(12.0*frame_parms->N_RB_DL);
|
||||
LOG_D(OCM,"[SIM][UL] RU %d rx_pwr (ADC out) %f dB (%d) for subframe %d (offset %d) = %p\n",ru_id,10*log10((double)rx_pwr2),rx_pwr2,subframe,sf_offset,rxdata[0]+sf_offset_tdd);
|
||||
#else
|
||||
UNUSED_VARIABLE(tx_pwr);
|
||||
UNUSED_VARIABLE(rx_pwr);
|
||||
UNUSED_VARIABLE(rx_pwr2);
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
#ifndef __SIMULATION_TOOLS_DEFS_H__
|
||||
#define __SIMULATION_TOOLS_DEFS_H__
|
||||
#include "PHY/defs_common.h"
|
||||
|
||||
#include <pthread.h>
|
||||
/** @defgroup _numerical_ Useful Numerical Functions
|
||||
*@{
|
||||
The present clause specifies several numerical functions for testing of digital communication systems.
|
||||
@@ -181,6 +181,31 @@ typedef enum {
|
||||
EPA_high,
|
||||
} SCM_t;
|
||||
|
||||
#include "platform_constants.h"
|
||||
|
||||
typedef struct {
|
||||
channel_desc_t *RU2UE[NUMBER_OF_RU_MAX][NUMBER_OF_UE_MAX][MAX_NUM_CCs];
|
||||
channel_desc_t *UE2RU[NUMBER_OF_UE_MAX][NUMBER_OF_RU_MAX][MAX_NUM_CCs];
|
||||
double r_re_DL[NUMBER_OF_UE_MAX][2][30720];
|
||||
double r_im_DL[NUMBER_OF_UE_MAX][2][30720];
|
||||
double r_re_UL[NUMBER_OF_eNB_MAX][2][30720];
|
||||
double r_im_UL[NUMBER_OF_eNB_MAX][2][30720];
|
||||
int RU_output_mask[NUMBER_OF_UE_MAX];
|
||||
int UE_output_mask[NUMBER_OF_RU_MAX];
|
||||
pthread_mutex_t RU_output_mutex[NUMBER_OF_UE_MAX];
|
||||
pthread_mutex_t UE_output_mutex[NUMBER_OF_RU_MAX];
|
||||
pthread_mutex_t subframe_mutex;
|
||||
int subframe_ru_mask;
|
||||
int subframe_UE_mask;
|
||||
openair0_timestamp current_ru_rx_timestamp[NUMBER_OF_RU_MAX][MAX_NUM_CCs];
|
||||
openair0_timestamp current_UE_rx_timestamp[MAX_MOBILES_PER_ENB][MAX_NUM_CCs];
|
||||
openair0_timestamp last_ru_rx_timestamp[NUMBER_OF_RU_MAX][MAX_NUM_CCs];
|
||||
openair0_timestamp last_UE_rx_timestamp[MAX_MOBILES_PER_ENB][MAX_NUM_CCs];
|
||||
double ru_amp[NUMBER_OF_RU_MAX];
|
||||
pthread_t rfsim_thread;
|
||||
} sim_t;
|
||||
|
||||
|
||||
/**
|
||||
\brief This routine initializes a new channel descriptor
|
||||
\param nb_tx Number of TX antennas
|
||||
@@ -373,6 +398,20 @@ void multipath_tv_channel(channel_desc_t *desc,
|
||||
double N_RB2sampling_rate(uint16_t N_RB);
|
||||
double N_RB2channel_bandwidth(uint16_t N_RB);
|
||||
|
||||
#include "targets/RT/USER/rfsim.h"
|
||||
|
||||
void do_DL_sig(sim_t *sim,
|
||||
uint16_t subframe,
|
||||
uint32_t offset,
|
||||
uint32_t length,
|
||||
uint8_t abstraction_flag,LTE_DL_FRAME_PARMS *ue_frame_parms,
|
||||
uint8_t UE_id,
|
||||
int CC_id);
|
||||
|
||||
void do_UL_sig(sim_t *sim,
|
||||
uint16_t subframe,uint8_t abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms,
|
||||
uint32_t frame,int ru_id,uint8_t CC_id);
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
@@ -1324,6 +1324,26 @@ fill_nfapi_ulsch_harq_information(module_id_t module_
|
||||
} // get Tmode
|
||||
}
|
||||
|
||||
uint8_t Np[6][4]= {{0,1,3,5},
|
||||
{0,3,8,13},
|
||||
{0,5,13,22},
|
||||
{0,11,27,44},
|
||||
{0,16,41,66},
|
||||
{0,22,55,88}};
|
||||
|
||||
// This is part of the PUCCH allocation procedure (see Section 10.1 36.213)
|
||||
uint16_t getNp(int dl_Bandwidth,uint8_t nCCE,uint8_t plus1)
|
||||
{
|
||||
AssertFatal(dl_Bandwidth<6,"dl_Bandwidth %d>5\n",dl_Bandwidth);
|
||||
|
||||
if (nCCE>=Np[dl_Bandwidth][2])
|
||||
return(Np[dl_Bandwidth][2+plus1]);
|
||||
else if (nCCE>=Np[dl_Bandwidth][1])
|
||||
return(Np[dl_Bandwidth][1+plus1]);
|
||||
else
|
||||
return(Np[dl_Bandwidth][0+plus1]);
|
||||
}
|
||||
|
||||
void
|
||||
fill_nfapi_harq_information(module_id_t module_idP,
|
||||
int CC_idP,
|
||||
@@ -1365,8 +1385,7 @@ fill_nfapi_harq_information(module_id_t module_idP,
|
||||
harq_information->harq_information_rel10_tdd.ack_nack_mode = 0; // bundling
|
||||
}
|
||||
harq_information->harq_information_rel10_tdd.tl.tag = NFAPI_UL_CONFIG_REQUEST_HARQ_INFORMATION_REL10_TDD_TAG;
|
||||
LTE_DL_FRAME_PARMS *frame_parms = &RC.eNB[module_idP][CC_idP]->frame_parms;
|
||||
harq_information->harq_information_rel10_tdd.n_pucch_1_0 = get_Np(frame_parms->N_RB_DL,cce_idxP,0) +
|
||||
harq_information->harq_information_rel10_tdd.n_pucch_1_0 = getNp(cc->mib->message.dl_Bandwidth,cce_idxP,0) +
|
||||
cc->radioResourceConfigCommon->pucch_ConfigCommon.n1PUCCH_AN + cce_idxP;
|
||||
harq_information->harq_information_rel10_tdd.number_of_pucch_resources = 1;
|
||||
} else {
|
||||
@@ -3157,7 +3176,7 @@ allocate_CCEs(int module_idP, int CC_idP, frame_t frameP, sub_frame_t subframeP,
|
||||
cc->radioResourceConfigCommon->pucch_ConfigCommon.n1PUCCH_AN + fCCE;
|
||||
else
|
||||
ul_req->ul_config_pdu_list[ack_int].uci_harq_pdu.harq_information.harq_information_rel10_tdd.n_pucch_1_0 =
|
||||
cc->radioResourceConfigCommon->pucch_ConfigCommon.n1PUCCH_AN + fCCE + get_Np(to_prb(cc->mib->message.dl_Bandwidth),fCCE,0) ;
|
||||
cc->radioResourceConfigCommon->pucch_ConfigCommon.n1PUCCH_AN + fCCE + getNp(cc->mib->message.dl_Bandwidth,fCCE,0) ;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3362,6 +3381,132 @@ uint8_t frame_subframe2_dl_harq_pid(TDD_Config_t *tdd_Config, int abs_frameP, su
|
||||
return -1;
|
||||
}
|
||||
|
||||
unsigned char ul_ACK_subframe2M(TDD_Config_t *tdd_Config,unsigned char subframe)
|
||||
{
|
||||
|
||||
if (tdd_Config == NULL) {
|
||||
return(1);
|
||||
} else {
|
||||
switch (tdd_Config->subframeAssignment) {
|
||||
case 1:
|
||||
return 1; // don't ACK special subframe for now
|
||||
if (subframe == 2) { // ACK subframes 5 and 6
|
||||
return(2);
|
||||
} else if (subframe == 3) { // ACK subframe 9
|
||||
return(1); // To be updated
|
||||
} else if (subframe == 7) { // ACK subframes 0 and 1
|
||||
return(2); // To be updated
|
||||
} else if (subframe == 8) { // ACK subframe 4
|
||||
return(1); // To be updated
|
||||
} else {
|
||||
AssertFatal(1==0,"illegal subframe %d for tdd_config %d\n",
|
||||
subframe,tdd_Config->subframeAssignment);
|
||||
|
||||
}
|
||||
|
||||
break;
|
||||
case 3:
|
||||
if (subframe == 2) { // ACK subframes 5 and 6
|
||||
return(2); // should be 3
|
||||
} else if (subframe == 3) { // ACK subframes 7 and 8
|
||||
return(2); // To be updated
|
||||
} else if (subframe == 4) { // ACK subframes 9 and 0
|
||||
return(2);
|
||||
} else {
|
||||
AssertFatal(1==0,"illegal subframe %d for tdd_config %d\n",
|
||||
subframe,tdd_Config->subframeAssignment);
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 4:
|
||||
if (subframe == 2) { // ACK subframes 0,4 and 5
|
||||
return(3); // should be 4
|
||||
} else if (subframe == 3) { // ACK subframes 6,7,8 and 9
|
||||
return(4);
|
||||
} else {
|
||||
AssertFatal(1==0,"illegal subframe %d for tdd_config %d\n",
|
||||
subframe,tdd_Config->subframeAssignment);
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 5:
|
||||
if (subframe == 2) { // ACK subframes 0,3,4,5,6,7,8 and 9
|
||||
return(8); // should be 3
|
||||
} else {
|
||||
AssertFatal(1==0,"illegal subframe %d for tdd_config %d\n",
|
||||
subframe,tdd_Config->subframeAssignment);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return(0);
|
||||
}
|
||||
|
||||
unsigned char ul_ACK_subframe2dl_subframe(TDD_Config_t *tdd_Config,unsigned char subframe,unsigned char ACK_index)
|
||||
{
|
||||
|
||||
if (tdd_Config == NULL) {
|
||||
return((subframe<4) ? subframe+6 : subframe-4);
|
||||
} else {
|
||||
switch (tdd_Config->subframeAssignment) {
|
||||
case 3:
|
||||
if (subframe == 2) { // ACK subframes 5 and 6
|
||||
if (ACK_index==2)
|
||||
return(1);
|
||||
|
||||
return(5+ACK_index);
|
||||
} else if (subframe == 3) { // ACK subframes 7 and 8
|
||||
return(7+ACK_index); // To be updated
|
||||
} else if (subframe == 4) { // ACK subframes 9 and 0
|
||||
return((9+ACK_index)%10);
|
||||
} else {
|
||||
AssertFatal(1==0,"illegal subframe %d for tdd_config->subframeAssignment %d\n",
|
||||
subframe,tdd_Config->subframeAssignment);
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 4:
|
||||
if (subframe == 2) { // ACK subframes 0, 4 and 5
|
||||
//if (ACK_index==2)
|
||||
// return(1); TBC
|
||||
if (ACK_index==2)
|
||||
return(0);
|
||||
|
||||
return(4+ACK_index);
|
||||
} else if (subframe == 3) { // ACK subframes 6, 7 8 and 9
|
||||
return(6+ACK_index); // To be updated
|
||||
} else {
|
||||
AssertFatal(1==0,"illegal subframe %d for tdd_config %d\n",
|
||||
subframe,tdd_Config->subframeAssignment);
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 1:
|
||||
if (subframe == 2) { // ACK subframes 5 and 6
|
||||
return(5+ACK_index);
|
||||
} else if (subframe == 3) { // ACK subframe 9
|
||||
return(9); // To be updated
|
||||
} else if (subframe == 7) { // ACK subframes 0 and 1
|
||||
return(ACK_index); // To be updated
|
||||
} else if (subframe == 8) { // ACK subframe 4
|
||||
return(4); // To be updated
|
||||
} else {
|
||||
AssertFatal(1==0,"illegal subframe %d for tdd_config %d\n",
|
||||
subframe,tdd_Config->subframeAssignment);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return(0);
|
||||
}
|
||||
|
||||
void
|
||||
extract_harq(module_id_t mod_idP, int CC_idP, int UE_id,
|
||||
@@ -3381,11 +3526,10 @@ extract_harq(module_id_t mod_idP, int CC_idP, int UE_id,
|
||||
int tmode[5];
|
||||
int i, j, m;
|
||||
uint8_t *pdu;
|
||||
LTE_DL_FRAME_PARMS *fp;
|
||||
sub_frame_t subframe_tx;
|
||||
int frame_tx;
|
||||
uint8_t harq_pid;
|
||||
|
||||
|
||||
#if (RRC_VERSION >= MAKE_VERSION(13, 0, 0))
|
||||
if (UE_list->UE_template[pCCid][UE_id].physicalConfigDedicated != NULL &&
|
||||
UE_list->UE_template[pCCid][UE_id].physicalConfigDedicated->pucch_ConfigDedicated != NULL &&
|
||||
@@ -3396,62 +3540,60 @@ extract_harq(module_id_t mod_idP, int CC_idP, int UE_id,
|
||||
&& (format == 1))))
|
||||
spatial_bundling = 1;
|
||||
#endif
|
||||
fp=&(RC.eNB[mod_idP][CC_idP]->frame_parms);
|
||||
for (i = 0; i < numCC; i++)
|
||||
tmode[i] = get_tmode(mod_idP, i, UE_id);
|
||||
|
||||
|
||||
if (cc->tdd_Config) {
|
||||
harq_indication_tdd = (nfapi_harq_indication_tdd_rel13_t *) harq_indication;
|
||||
// pdu = &harq_indication_tdd->harq_tb_n[0];
|
||||
|
||||
|
||||
num_ack_nak = harq_indication_tdd->number_of_ack_nack;
|
||||
|
||||
|
||||
switch (harq_indication_tdd->mode) {
|
||||
case 0: // Format 1a/b bundling
|
||||
AssertFatal(numCC == 1, "numCC %d > 1, should not be using Format1a/b\n", numCC);
|
||||
int M = ul_ACK_subframe2_M(fp,subframeP);
|
||||
int M = ul_ACK_subframe2M(cc->tdd_Config,subframeP);
|
||||
for(m=0;m<M;m++){
|
||||
subframe_tx = ul_ACK_subframe2_dl_subframe(fp,subframeP,m);
|
||||
if(frameP==1023&&subframeP>5)
|
||||
frame_tx=-1;
|
||||
else
|
||||
frame_tx = subframeP < 4 ? frameP -1 : frameP;
|
||||
harq_pid = frame_subframe2_dl_harq_pid(cc->tdd_Config,frame_tx,subframe_tx);
|
||||
subframe_tx = ul_ACK_subframe2dl_subframe(cc->tdd_Config,subframeP,m);
|
||||
if(frameP==1023&&subframeP>5)
|
||||
frame_tx=-1;
|
||||
else
|
||||
frame_tx = subframeP < 4 ? frameP -1 : frameP;
|
||||
harq_pid = frame_subframe2_dl_harq_pid(cc->tdd_Config,frame_tx,subframe_tx);
|
||||
RA_t *ra = &RC.mac[mod_idP]->common_channels[CC_idP].ra[0];
|
||||
|
||||
if(num_ack_nak==1){
|
||||
if(harq_indication_tdd->harq_data[0].bundling.value_0==1){ //ack
|
||||
sched_ctl->round[CC_idP][harq_pid] = 8; // release HARQ process
|
||||
sched_ctl->tbcnt[CC_idP][harq_pid] = 0;
|
||||
LOG_D(MAC,"frame %d subframe %d Acking (%d,%d) harq_pid %d round %d\n",frameP,subframeP,frame_tx,subframe_tx,harq_pid,sched_ctl->round[CC_idP][harq_pid]);
|
||||
}else{ //nack
|
||||
if( sched_ctl->round[CC_idP][harq_pid]<8)
|
||||
sched_ctl->round[CC_idP][harq_pid]++;
|
||||
LOG_D(MAC,"frame %d subframe %d Nacking (%d,%d) harq_pid %d round %d\n",frameP,subframeP,frame_tx,subframe_tx,harq_pid,sched_ctl->round[CC_idP][harq_pid]);
|
||||
if(sched_ctl->round[CC_idP][harq_pid] == 8){
|
||||
for (uint8_t ra_i = 0; ra_i < NB_RA_PROC_MAX; ra_i++) {
|
||||
if((ra[ra_i].rnti == rnti) && (ra[ra_i].state == WAITMSG4ACK)){
|
||||
//Msg NACK num to MAC ,remove UE
|
||||
// add UE info to freeList
|
||||
LOG_I(RRC, "put UE %x into freeList\n", rnti);
|
||||
put_UE_in_freelist(mod_idP, rnti, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
for (uint8_t ra_i = 0; ra_i < NB_RA_PROC_MAX; ra_i++) {
|
||||
if ((ra[ra_i].rnti == rnti) && (ra[ra_i].state == MSGCRNTI_ACK) && (ra[ra_i].crnti_harq_pid == harq_pid)) {
|
||||
LOG_D(MAC,"CRNTI Reconfiguration: ACK %d rnti %x round %d frame %d subframe %d \n",harq_indication_tdd->harq_data[0].bundling.value_0,rnti,sched_ctl->round[CC_idP][harq_pid],frameP,subframeP);
|
||||
if(num_ack_nak == 1 && harq_indication_tdd->harq_data[0].bundling.value_0 == 1) {
|
||||
cancel_ra_proc(mod_idP, CC_idP, frameP, ra[ra_i].rnti);
|
||||
}else{
|
||||
if(sched_ctl->round[CC_idP][harq_pid] == 7){
|
||||
cancel_ra_proc(mod_idP, CC_idP, frameP, ra[ra_i].rnti);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if(num_ack_nak==1){
|
||||
if(harq_indication_tdd->harq_data[0].bundling.value_0==1){ //ack
|
||||
sched_ctl->round[CC_idP][harq_pid] = 8; // release HARQ process
|
||||
sched_ctl->tbcnt[CC_idP][harq_pid] = 0;
|
||||
LOG_D(MAC,"frame %d subframe %d Acking (%d,%d) harq_pid %d round %d\n",frameP,subframeP,frame_tx,subframe_tx,harq_pid,sched_ctl->round[CC_idP][harq_pid]);
|
||||
}else{ //nack
|
||||
if( sched_ctl->round[CC_idP][harq_pid]<8) sched_ctl->round[CC_idP][harq_pid]++;
|
||||
LOG_D(MAC,"frame %d subframe %d Nacking (%d,%d) harq_pid %d round %d\n",frameP,subframeP,frame_tx,subframe_tx,harq_pid,sched_ctl->round[CC_idP][harq_pid]);
|
||||
if(sched_ctl->round[CC_idP][harq_pid] == 8){
|
||||
for (uint8_t ra_i = 0; ra_i < NB_RA_PROC_MAX; ra_i++) {
|
||||
if((ra[ra_i].rnti == rnti) && (ra[ra_i].state == WAITMSG4ACK)){
|
||||
//Msg NACK num to MAC ,remove UE
|
||||
// add UE info to freeList
|
||||
LOG_I(MAC, "put UE %x into freeList\n", rnti);
|
||||
put_UE_in_freelist(mod_idP, rnti, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
for (uint8_t ra_i = 0; ra_i < NB_RA_PROC_MAX; ra_i++) {
|
||||
if ((ra[ra_i].rnti == rnti) && (ra[ra_i].state == MSGCRNTI_ACK) && (ra[ra_i].crnti_harq_pid == harq_pid)) {
|
||||
LOG_D(MAC,"CRNTI Reconfiguration: ACK %d rnti %x round %d frame %d subframe %d \n",harq_indication_tdd->harq_data[0].bundling.value_0,rnti,sched_ctl->round[CC_idP][harq_pid],frameP,subframeP);
|
||||
if(num_ack_nak == 1 && harq_indication_tdd->harq_data[0].bundling.value_0 == 1) {
|
||||
cancel_ra_proc(mod_idP, CC_idP, frameP, ra[ra_i].rnti);
|
||||
}else{
|
||||
if(sched_ctl->round[CC_idP][harq_pid] == 7){
|
||||
cancel_ra_proc(mod_idP, CC_idP, frameP, ra[ra_i].rnti);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -4266,6 +4408,9 @@ cqi_indication(module_id_t mod_idP, int CC_idP, frame_t frameP,
|
||||
pdu, rel9->length);
|
||||
|
||||
LOG_D(MAC,"Frame %d Subframe %d update CQI:%d\n",frameP,subframeP,sched_ctl->dl_cqi[CC_idP]);
|
||||
|
||||
sched_ctl->cqi_req_flag &= (~(1 << subframeP));
|
||||
sched_ctl->cqi_received = 1;
|
||||
}
|
||||
|
||||
// timing advance
|
||||
@@ -4336,8 +4481,18 @@ static int nack_or_dtx_reported(
|
||||
int i;
|
||||
|
||||
if (cc->tdd_Config) {
|
||||
AssertFatal(0==1, "TDD to be done. FAPI structures (see nfapi_harq_indication_tdd_rel13_t) are not clean. To be cleaned as well?\n");
|
||||
abort();
|
||||
nfapi_harq_indication_tdd_rel13_t *harq_indication_tdd = &harq_pdu->harq_indication_tdd_rel13;
|
||||
// AssertFatal(0==1, "TDD to be done. FAPI structures (see nfapi_harq_indication_tdd_rel13_t) are not clean. To be cleaned as well?\n");
|
||||
AssertFatal(harq_indication_tdd->number_of_ack_nack==1,"number of ack/nak %d != 1\n",harq_indication_tdd->number_of_ack_nack);
|
||||
switch (harq_indication_tdd->mode) {
|
||||
case 0: // Format 1a/b bundling
|
||||
if (harq_indication_tdd->harq_data[0].bundling.value_0 == 1) return 1;
|
||||
return 0;
|
||||
break;
|
||||
default:
|
||||
AssertFatal(1==0,"harq_indication_tdd type is not bundling\n");
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
nfapi_harq_indication_fdd_rel13_t *hi = &harq_pdu->harq_indication_fdd_rel13;
|
||||
for (i = 0; i < hi->number_of_ack_nack; hi++)
|
||||
|
||||
@@ -158,8 +158,8 @@ rx_sdu(const module_id_t enb_mod_idP,
|
||||
|
||||
if (UE_id != -1) {
|
||||
LOG_D(MAC,
|
||||
"[eNB %d][PUSCH %d] CC_id %d Received ULSCH sdu round %d from PHY (rnti %x, UE_id %d) ul_cqi %d\n",
|
||||
enb_mod_idP, harq_pid, CC_idP,
|
||||
"[eNB %d][PUSCH %d] CC_id %d %d.%d Received ULSCH sdu round %d from PHY (rnti %x, UE_id %d) ul_cqi %d\n",
|
||||
enb_mod_idP, harq_pid, CC_idP,frameP,subframeP,
|
||||
UE_list->UE_sched_ctrl[UE_id].round_UL[CC_idP][harq_pid],
|
||||
current_rnti, UE_id, ul_cqi);
|
||||
|
||||
@@ -191,9 +191,9 @@ rx_sdu(const module_id_t enb_mod_idP,
|
||||
if (UE_list->UE_template[CC_idP][UE_id].scheduled_ul_bytes < 0)
|
||||
UE_list->UE_template[CC_idP][UE_id].scheduled_ul_bytes = 0;
|
||||
} else { // we've got an error
|
||||
LOG_D(MAC,
|
||||
"[eNB %d][PUSCH %d] CC_id %d ULSCH in error in round %d, ul_cqi %d\n",
|
||||
enb_mod_idP, harq_pid, CC_idP,
|
||||
LOG_I(MAC,
|
||||
"[eNB %d][PUSCH %d] CC_id %d %d.%d ULSCH in error in round %d, ul_cqi %d\n",
|
||||
enb_mod_idP, harq_pid, CC_idP,frameP,subframeP,
|
||||
UE_list->UE_sched_ctrl[UE_id].round_UL[CC_idP][harq_pid],
|
||||
ul_cqi);
|
||||
|
||||
@@ -1332,18 +1332,23 @@ schedule_ulsch_rnti(module_id_t module_idP,
|
||||
// reset the scheduling request
|
||||
UE_template->ul_SR = 0;
|
||||
status = mac_eNB_get_rrc_status(module_idP, rnti);
|
||||
if (status < RRC_CONNECTED)
|
||||
cqi_req = 0;
|
||||
else if (UE_sched_ctrl->cqi_req_timer > 30) {
|
||||
if (nfapi_mode) {
|
||||
cqi_req = 0;
|
||||
} else {
|
||||
cqi_req = 1;
|
||||
UE_sched_ctrl->cqi_req_flag |= 1 << sched_subframeP;
|
||||
cqi_req = 0;
|
||||
|
||||
if (status >= RRC_CONNECTED && UE_sched_ctrl->cqi_req_timer > 30) {
|
||||
if (UE_sched_ctrl->cqi_received == 0) {
|
||||
if (nfapi_mode) {
|
||||
cqi_req = 0;
|
||||
} else {
|
||||
cqi_req = 1;
|
||||
UE_sched_ctrl->cqi_req_flag |= 1 << sched_subframeP;
|
||||
}
|
||||
}
|
||||
UE_sched_ctrl->cqi_req_timer = 0;
|
||||
} else
|
||||
cqi_req = 0;
|
||||
else if (UE_sched_ctrl->cqi_received == 1) {
|
||||
UE_sched_ctrl->cqi_req_flag = 0;
|
||||
UE_sched_ctrl->cqi_received = 0;
|
||||
UE_sched_ctrl->cqi_req_timer = 0;
|
||||
}
|
||||
}
|
||||
|
||||
//power control
|
||||
//compute the expected ULSCH RX power (for the stats)
|
||||
@@ -1562,7 +1567,7 @@ schedule_ulsch_rnti(module_id_t module_idP,
|
||||
CC_id, UE_id, subframeP,
|
||||
S_UL_SCHEDULED);
|
||||
|
||||
//LOG_D(MAC, "[eNB %d] CC_id %d Frame %d, subframeP %d: Generated ULSCH DCI for next UE_id %d, format 0\n", module_idP, CC_id, frameP, subframeP, UE_id);
|
||||
LOG_D(MAC, "[eNB %d] CC_id %d Frame %d, subframeP %d: Generated ULSCH DCI for next UE_id %d, format 0\n", module_idP, CC_id, frameP, subframeP, UE_id);
|
||||
LOG_D(MAC,"[PUSCH %d] SFN/SF:%04d%d UL_CFG:SFN/SF:%04d%d CQI:%d for UE %d/%x\n", harq_pid,frameP,subframeP,ul_sched_frame,ul_sched_subframeP,cqi_req,UE_id,rnti);
|
||||
|
||||
// increment first rb for next UE allocation
|
||||
|
||||
@@ -951,7 +951,10 @@ typedef struct {
|
||||
int16_t ta_update;
|
||||
uint16_t ul_consecutive_errors;
|
||||
int32_t context_active_timer;
|
||||
/// timer for regular CQI request on PUSCH
|
||||
int32_t cqi_req_timer;
|
||||
/// indicator that CQI was received on PUSCH when requested
|
||||
int32_t cqi_received;
|
||||
int32_t ul_inactivity_timer;
|
||||
int32_t ul_failure_timer;
|
||||
uint32_t ue_reestablishment_reject_timer;
|
||||
|
||||
@@ -1060,6 +1060,12 @@ uint16_t mac_computeRIV(uint16_t N_RB_DL, uint16_t RBstart,
|
||||
|
||||
int get_phich_resource_times6(COMMON_channels_t * cc);
|
||||
|
||||
uint8_t frame_subframe2_dl_harq_pid(TDD_Config_t *tdd_Config, int abs_frameP, sub_frame_t subframeP);
|
||||
|
||||
uint8_t ul_subframe2_k_phich(COMMON_channels_t * cc, sub_frame_t ul_subframe);
|
||||
|
||||
unsigned char ul_ACK_subframe2M(TDD_Config_t *tdd_Config,unsigned char subframe);
|
||||
|
||||
int to_rbg(int dl_Bandwidth);
|
||||
|
||||
int to_prb(int dl_Bandwidth);
|
||||
|
||||
@@ -93,7 +93,7 @@ uint16_t ue_process_rar(const module_id_t module_idP, const int CC_id, const fra
|
||||
}
|
||||
|
||||
LOG_I(MAC,
|
||||
"[eNB %d][RAPROC] Frame %d Received RAR (%02x|%02x.%02x.%02x.%02x.%02x.%02x) for preamble %d/%d\n",
|
||||
"[UE %d][RAPROC] Frame %d Received RAR (%02x|%02x.%02x.%02x.%02x.%02x.%02x) for preamble %d/%d\n",
|
||||
module_idP, frameP, *(uint8_t *) rarh, rar[0], rar[1], rar[2],
|
||||
rar[3], rar[4], rar[5], rarh->RAPID, preamble_index);
|
||||
#ifdef DEBUG_RAR
|
||||
|
||||
@@ -504,7 +504,7 @@ char openair_rrc_ue_init( const module_id_t ue_mod_idP, const unsigned char eNB_
|
||||
rrc_set_state (ue_mod_idP, RRC_STATE_INACTIVE);
|
||||
rrc_set_sub_state (ue_mod_idP, RRC_SUB_STATE_INACTIVE);
|
||||
|
||||
LOG_D(RRC,"[UE %d] INIT State = RRC_IDLE (eNB %d)\n",ctxt.module_id,eNB_index);
|
||||
LOG_I(RRC,"[UE %d] INIT State = RRC_IDLE (eNB %d)\n",ctxt.module_id,eNB_index);
|
||||
UE_rrc_inst[ctxt.module_id].Info[eNB_index].State=RRC_IDLE;
|
||||
UE_rrc_inst[ctxt.module_id].Info[eNB_index].T300_active = 0;
|
||||
UE_rrc_inst[ctxt.module_id].Info[eNB_index].T304_active = 0;
|
||||
@@ -3022,7 +3022,7 @@ int decode_BCCH_DLSCH_Message(
|
||||
&bcch_message->message.choice.c1.choice.systemInformation,
|
||||
sizeof(SystemInformation_t) );
|
||||
|
||||
LOG_D( RRC, "[UE %"PRIu8"] Decoding SI for frameP %"PRIu32"\n",
|
||||
LOG_I( RRC, "[UE %"PRIu8"] Decoding SI for frameP %"PRIu32"\n",
|
||||
ctxt_pP->module_id,
|
||||
ctxt_pP->frame );
|
||||
decode_SI( ctxt_pP, eNB_index );
|
||||
@@ -3247,6 +3247,7 @@ int decode_SIB1( const protocol_ctxt_t* const ctxt_pP, const uint8_t eNB_index,
|
||||
#endif
|
||||
);
|
||||
|
||||
LOG_I(RRC,"Setting SIStatus bit 0 to 1\n");
|
||||
UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIStatus = 1;
|
||||
UE_rrc_inst[ctxt_pP->module_id].Info[eNB_index].SIB1systemInfoValueTag = sib1->systemInfoValueTag;
|
||||
|
||||
|
||||
@@ -29,12 +29,15 @@
|
||||
*/
|
||||
#define RRC_ENB
|
||||
#define RRC_ENB_C
|
||||
|
||||
#include <asn_application.h>
|
||||
#include <asn_internal.h> /* for _ASN_DEFAULT_STACK_MAX */
|
||||
#include <per_encoder.h>
|
||||
#include "rrc_defs.h"
|
||||
#include "rrc_extern.h"
|
||||
#include "assertions.h"
|
||||
#include "common/ran_context.h"
|
||||
#include "asn1_conversions.h"
|
||||
#include "asn_internal.h"
|
||||
#include "RRC/L2_INTERFACE/openair_rrc_L2_interface.h"
|
||||
#include "LAYER2/RLC/rlc.h"
|
||||
#include "LAYER2/MAC/mac_proto.h"
|
||||
|
||||
+10
-10
@@ -384,7 +384,7 @@ int logInit (void)
|
||||
register_log_component("RLC","log",RLC);
|
||||
register_log_component("PDCP","log",PDCP);
|
||||
register_log_component("RRC","log",RRC);
|
||||
register_log_component("EMU","log",EMU);
|
||||
register_log_component("SIM","log",SIM);
|
||||
register_log_component("OMG","csv",OMG);
|
||||
register_log_component("OTG","log",OTG);
|
||||
register_log_component("OTG_LATENCY","dat",OTG_LATENCY);
|
||||
@@ -455,7 +455,7 @@ int logInit (void)
|
||||
|
||||
if (g_log->syslog) {
|
||||
#if ! defined(CN_BUILD)
|
||||
openlog(g_log->log_component[EMU].name, LOG_PID, g_log->config.facility);
|
||||
openlog(g_log->log_component[SIM].name, LOG_PID, g_log->config.facility);
|
||||
#endif // ! defined(CN_BUILD)
|
||||
}
|
||||
log_getconfig(g_log);
|
||||
@@ -1257,16 +1257,16 @@ int main(int argc, char *argv[])
|
||||
int test_log(void)
|
||||
{
|
||||
LOG_ENTER(MAC); // because the default level is DEBUG
|
||||
LOG_I(EMU, "1 Starting OAI logs version %s Build date: %s on %s\n",
|
||||
LOG_I(SIM, "1 Starting OAI logs version %s Build date: %s on %s\n",
|
||||
BUILD_VERSION, BUILD_DATE, BUILD_HOST);
|
||||
LOG_D(MAC, "1 debug MAC \n");
|
||||
LOG_N(MAC, "1 notice MAC \n");
|
||||
LOG_W(MAC, "1 warning MAC \n");
|
||||
|
||||
set_comp_log(EMU, LOG_INFO, FLAG_ONLINE);
|
||||
set_comp_log(SIM, LOG_INFO, FLAG_ONLINE);
|
||||
set_comp_log(MAC, LOG_WARNING, 0);
|
||||
|
||||
LOG_I(EMU, "2 Starting OAI logs version %s Build date: %s on %s\n",
|
||||
LOG_I(SIM, "2 Starting OAI logs version %s Build date: %s on %s\n",
|
||||
BUILD_VERSION, BUILD_DATE, BUILD_HOST);
|
||||
LOG_E(MAC, "2 emerge MAC\n");
|
||||
LOG_D(MAC, "2 debug MAC \n");
|
||||
@@ -1278,7 +1278,7 @@ int test_log(void)
|
||||
set_comp_log(MAC, LOG_NOTICE, 1);
|
||||
|
||||
LOG_ENTER(MAC);
|
||||
LOG_I(EMU, "3 Starting OAI logs version %s Build date: %s on %s\n",
|
||||
LOG_I(SIM, "3 Starting OAI logs version %s Build date: %s on %s\n",
|
||||
BUILD_VERSION, BUILD_DATE, BUILD_HOST);
|
||||
LOG_D(MAC, "3 debug MAC \n");
|
||||
LOG_N(MAC, "3 notice MAC \n");
|
||||
@@ -1286,10 +1286,10 @@ int test_log(void)
|
||||
LOG_I(MAC, "3 info MAC \n");
|
||||
|
||||
set_comp_log(MAC, LOG_DEBUG,1);
|
||||
set_comp_log(EMU, LOG_DEBUG,1);
|
||||
set_comp_log(SIM, LOG_DEBUG,1);
|
||||
|
||||
LOG_ENTER(MAC);
|
||||
LOG_I(EMU, "4 Starting OAI logs version %s Build date: %s on %s\n",
|
||||
LOG_I(SIM, "4 Starting OAI logs version %s Build date: %s on %s\n",
|
||||
BUILD_VERSION, BUILD_DATE, BUILD_HOST);
|
||||
LOG_D(MAC, "4 debug MAC \n");
|
||||
LOG_N(MAC, "4 notice MAC \n");
|
||||
@@ -1298,7 +1298,7 @@ int test_log(void)
|
||||
|
||||
|
||||
set_comp_log(MAC, LOG_DEBUG,0);
|
||||
set_comp_log(EMU, LOG_DEBUG,0);
|
||||
set_comp_log(SIM, LOG_DEBUG,0);
|
||||
|
||||
LOG_I(LOG, "5 Starting OAI logs version %s Build date: %s on %s\n",
|
||||
BUILD_VERSION, BUILD_DATE, BUILD_HOST);
|
||||
@@ -1309,7 +1309,7 @@ int test_log(void)
|
||||
|
||||
|
||||
set_comp_log(MAC, LOG_TRACE,0X07F);
|
||||
set_comp_log(EMU, LOG_TRACE,0X07F);
|
||||
set_comp_log(SIM, LOG_TRACE,0X07F);
|
||||
|
||||
LOG_ENTER(MAC);
|
||||
LOG_I(LOG, "6 Starting OAI logs version %s Build date: %s on %s\n",
|
||||
|
||||
@@ -151,7 +151,7 @@ typedef enum {
|
||||
MIN_LOG_COMPONENTS = 0,
|
||||
PHY = MIN_LOG_COMPONENTS,
|
||||
MAC,
|
||||
EMU,
|
||||
SIM,
|
||||
OCG,
|
||||
OMG,
|
||||
OPT,
|
||||
|
||||
@@ -89,9 +89,6 @@ const char* eurecomVariablesNames[] = {
|
||||
"subframe_TX1_UE",
|
||||
"subframe_RX0_UE",
|
||||
"subframe_RX1_UE",
|
||||
"missed_slot_enb",
|
||||
"daq_mbox",
|
||||
"rx_offset_mbox",
|
||||
"ue_rx_offset",
|
||||
"diff2",
|
||||
"hw_subframe",
|
||||
@@ -222,7 +219,10 @@ const char* eurecomFunctionsNames[] = {
|
||||
"ue_lock_mutex_rxtx_for_cnt_decrement1",
|
||||
"ue_lock_mutex_rxtx_for_cnt_increment0",
|
||||
"ue_lock_mutex_rxtx_for_cnt_increment1",
|
||||
|
||||
/* simulation signals */
|
||||
"do_DL_sig",
|
||||
"do_UL_sig",
|
||||
"UE_trx_read",
|
||||
/* RRH signals */
|
||||
"eNB_tx",
|
||||
"eNB_rx",
|
||||
|
||||
@@ -65,9 +65,6 @@ typedef enum {
|
||||
VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_TX1_UE,
|
||||
VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_RX0_UE,
|
||||
VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_RX1_UE,
|
||||
VCD_SIGNAL_DUMPER_VARIABLES_MISSED_SLOTS_ENB,
|
||||
VCD_SIGNAL_DUMPER_VARIABLES_DAQ_MBOX,
|
||||
VCD_SIGNAL_DUMPER_VARIABLES_UE_OFFSET_MBOX,
|
||||
VCD_SIGNAL_DUMPER_VARIABLES_UE_RX_OFFSET,
|
||||
VCD_SIGNAL_DUMPER_VARIABLES_DIFF,
|
||||
VCD_SIGNAL_DUMPER_VARIABLES_HW_SUBFRAME,
|
||||
@@ -199,7 +196,10 @@ typedef enum {
|
||||
VCD_SIGNAL_DUMPER_FUNCTIONS_UE_LOCK_MUTEX_RXTX_FOR_CNT_DECREMENT1,
|
||||
VCD_SIGNAL_DUMPER_FUNCTIONS_UE_LOCK_MUTEX_RXTX_FOR_CNT_INCREMENT0,
|
||||
VCD_SIGNAL_DUMPER_FUNCTIONS_UE_LOCK_MUTEX_RXTX_FOR_CNT_INCREMENT1,
|
||||
|
||||
/* SIMULATION signals */
|
||||
VCD_SIGNAL_DUMPER_FUNCTIONS_SIM_DO_DL_SIGNAL,
|
||||
VCD_SIGNAL_DUMPER_FUNCTIONS_SIM_DO_UL_SIGNAL,
|
||||
VCD_SIGNAL_DUMPER_FUNCTIONS_SIM_UE_TRX_READ,
|
||||
/* RRH signals */
|
||||
VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_TX,
|
||||
VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_RX,
|
||||
|
||||
@@ -0,0 +1,215 @@
|
||||
Active_eNBs = ( "eNB-Eurecom-LTEBox");
|
||||
# Asn1_verbosity, choice in: none, info, annoying
|
||||
Asn1_verbosity = "none";
|
||||
|
||||
eNBs =
|
||||
(
|
||||
{
|
||||
# real_time choice in {hard, rt-preempt, no}
|
||||
real_time = "no";
|
||||
|
||||
////////// Identification parameters:
|
||||
eNB_ID = 0xe00;
|
||||
|
||||
cell_type = "CELL_MACRO_ENB";
|
||||
|
||||
eNB_name = "eNB-Eurecom-LTEBox";
|
||||
|
||||
// Tracking area code, 0x0000 and 0xfffe are reserved values
|
||||
tracking_area_code = "1";
|
||||
|
||||
mobile_country_code = "208";
|
||||
|
||||
mobile_network_code = "93";
|
||||
|
||||
tr_s_preference = "local_mac"
|
||||
|
||||
////////// Physical parameters:
|
||||
|
||||
component_carriers = (
|
||||
{
|
||||
node_function = "NGFI_RCC_IF4p5";
|
||||
node_timing = "synch_to_ext_device";
|
||||
node_synch_ref = 0;
|
||||
frame_type = "TDD";
|
||||
tdd_config = 1;
|
||||
tdd_config_s = 0;
|
||||
prefix_type = "NORMAL";
|
||||
eutra_band = 38;
|
||||
downlink_frequency = 2580000000L;
|
||||
uplink_frequency_offset = 0;
|
||||
Nid_cell = 0;
|
||||
N_RB_DL = 50;
|
||||
Nid_cell_mbsfn = 0;
|
||||
nb_antenna_ports = 1;
|
||||
nb_antennas_tx = 1;
|
||||
nb_antennas_rx = 1;
|
||||
tx_gain = 90;
|
||||
rx_gain = 125;
|
||||
pbch_repetition = "FALSE";
|
||||
prach_root = 0;
|
||||
prach_config_index = 0;
|
||||
prach_high_speed = "DISABLE";
|
||||
prach_zero_correlation = 1;
|
||||
prach_freq_offset = 2;
|
||||
pucch_delta_shift = 1;
|
||||
pucch_nRB_CQI = 0;
|
||||
pucch_nCS_AN = 0;
|
||||
pucch_n1_AN = 32;
|
||||
pdsch_referenceSignalPower = -27;
|
||||
pdsch_p_b = 0;
|
||||
pusch_n_SB = 1;
|
||||
pusch_enable64QAM = "DISABLE";
|
||||
pusch_hoppingMode = "interSubFrame";
|
||||
pusch_hoppingOffset = 0;
|
||||
pusch_groupHoppingEnabled = "ENABLE";
|
||||
pusch_groupAssignment = 0;
|
||||
pusch_sequenceHoppingEnabled = "DISABLE";
|
||||
pusch_nDMRS1 = 1;
|
||||
phich_duration = "NORMAL";
|
||||
phich_resource = "ONESIXTH";
|
||||
srs_enable = "DISABLE";
|
||||
/* srs_BandwidthConfig =;
|
||||
srs_SubframeConfig =;
|
||||
srs_ackNackST =;
|
||||
srs_MaxUpPts =;*/
|
||||
|
||||
pusch_p0_Nominal = -104;
|
||||
pusch_alpha = "AL1";
|
||||
pucch_p0_Nominal = -96;
|
||||
msg3_delta_Preamble = 6;
|
||||
pucch_deltaF_Format1 = "deltaF2";
|
||||
pucch_deltaF_Format1b = "deltaF3";
|
||||
pucch_deltaF_Format2 = "deltaF0";
|
||||
pucch_deltaF_Format2a = "deltaF0";
|
||||
pucch_deltaF_Format2b = "deltaF0";
|
||||
|
||||
rach_numberOfRA_Preambles = 64;
|
||||
rach_preamblesGroupAConfig = "DISABLE";
|
||||
/*
|
||||
rach_sizeOfRA_PreamblesGroupA = ;
|
||||
rach_messageSizeGroupA = ;
|
||||
rach_messagePowerOffsetGroupB = ;
|
||||
*/
|
||||
rach_powerRampingStep = 4;
|
||||
rach_preambleInitialReceivedTargetPower = -108;
|
||||
rach_preambleTransMax = 10;
|
||||
rach_raResponseWindowSize = 10;
|
||||
rach_macContentionResolutionTimer = 48;
|
||||
rach_maxHARQ_Msg3Tx = 4;
|
||||
|
||||
pcch_default_PagingCycle = 128;
|
||||
pcch_nB = "oneT";
|
||||
bcch_modificationPeriodCoeff = 2;
|
||||
ue_TimersAndConstants_t300 = 1000;
|
||||
ue_TimersAndConstants_t301 = 1000;
|
||||
ue_TimersAndConstants_t310 = 1000;
|
||||
ue_TimersAndConstants_t311 = 10000;
|
||||
ue_TimersAndConstants_n310 = 20;
|
||||
ue_TimersAndConstants_n311 = 1;
|
||||
ue_TransmissionMode = 1;
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
srb1_parameters :
|
||||
{
|
||||
# timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500]
|
||||
timer_poll_retransmit = 80;
|
||||
|
||||
# timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200]
|
||||
timer_reordering = 35;
|
||||
|
||||
# timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500]
|
||||
timer_status_prohibit = 0;
|
||||
|
||||
# poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)]
|
||||
poll_pdu = 4;
|
||||
|
||||
# poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)]
|
||||
poll_byte = 99999;
|
||||
|
||||
# max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32]
|
||||
max_retx_threshold = 4;
|
||||
}
|
||||
|
||||
# ------- SCTP definitions
|
||||
SCTP :
|
||||
{
|
||||
# Number of streams to use in input/output
|
||||
SCTP_INSTREAMS = 2;
|
||||
SCTP_OUTSTREAMS = 2;
|
||||
};
|
||||
|
||||
|
||||
////////// MME parameters:
|
||||
mme_ip_address = ( { ipv4 = "127.0.0.3";
|
||||
ipv6 = "192:168:30::17";
|
||||
active = "yes";
|
||||
preference = "ipv4";
|
||||
}
|
||||
);
|
||||
|
||||
NETWORK_INTERFACES :
|
||||
{
|
||||
|
||||
ENB_INTERFACE_NAME_FOR_S1_MME = "lo";
|
||||
ENB_IPV4_ADDRESS_FOR_S1_MME = "127.0.0.2/24";
|
||||
ENB_INTERFACE_NAME_FOR_S1U = "lo";
|
||||
ENB_IPV4_ADDRESS_FOR_S1U = "127.0.0.5/24";
|
||||
ENB_PORT_FOR_S1U = 2152; # Spec 2152
|
||||
};
|
||||
}
|
||||
);
|
||||
|
||||
MACRLCs = (
|
||||
{
|
||||
num_cc = 1;
|
||||
tr_s_preference = "local_L1";
|
||||
tr_n_preference = "local_RRC";
|
||||
}
|
||||
);
|
||||
|
||||
L1s = (
|
||||
{
|
||||
num_cc = 1;
|
||||
tr_n_preference = "local_mac";
|
||||
}
|
||||
);
|
||||
|
||||
RUs = (
|
||||
{
|
||||
local_if_name = "lo";
|
||||
remote_address = "127.0.0.2";
|
||||
local_address = "127.0.0.1";
|
||||
local_portc = 50000;
|
||||
remote_portc = 50000;
|
||||
local_portd = 50001;
|
||||
remote_portd = 50001;
|
||||
local_rf = "no"
|
||||
tr_preference = "udp_if4p5"
|
||||
nb_tx = 2
|
||||
nb_rx = 2
|
||||
att_tx = 0
|
||||
att_rx = 0;
|
||||
eNB_instances = [0];
|
||||
is_slave = "no";
|
||||
}
|
||||
);
|
||||
|
||||
log_config = {
|
||||
global_log_level ="info";
|
||||
global_log_verbosity ="medium";
|
||||
hw_log_level ="info";
|
||||
hw_log_verbosity ="medium";
|
||||
phy_log_level ="info";
|
||||
phy_log_verbosity ="medium";
|
||||
mac_log_level ="info";
|
||||
mac_log_verbosity ="high";
|
||||
rlc_log_level ="info";
|
||||
rlc_log_verbosity ="medium";
|
||||
pdcp_log_level ="info";
|
||||
pdcp_log_verbosity ="medium";
|
||||
rrc_log_level ="info";
|
||||
rrc_log_verbosity ="medium";
|
||||
};
|
||||
@@ -39,7 +39,7 @@ eNBs =
|
||||
downlink_frequency = 2685000000L;
|
||||
uplink_frequency_offset = -120000000;
|
||||
Nid_cell = 0;
|
||||
N_RB_DL = 50;
|
||||
N_RB_DL = 100;
|
||||
Nid_cell_mbsfn = 0;
|
||||
nb_antenna_ports = 1;
|
||||
nb_antennas_tx = 1;
|
||||
|
||||
@@ -11,14 +11,14 @@ RUs = (
|
||||
tr_preference = "udp_if4p5";
|
||||
nb_tx = 1;
|
||||
nb_rx = 1;
|
||||
max_pdschReferenceSignalPower = -15;
|
||||
max_rxgain = 120;
|
||||
max_pdschReferenceSignalPower = -27;
|
||||
max_rxgain = 125;
|
||||
bands = [7,13];
|
||||
}
|
||||
);
|
||||
|
||||
log_config = {
|
||||
global_log_level ="debug";
|
||||
global_log_level ="info";
|
||||
global_log_verbosity ="medium";
|
||||
hw_log_level ="info";
|
||||
hw_log_verbosity ="medium";
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
RUs = (
|
||||
{
|
||||
local_if_name = "lo";
|
||||
remote_address = "127.0.0.1"
|
||||
local_address = "127.0.0.2";
|
||||
local_portc = 50000;
|
||||
remote_portc = 50000;
|
||||
local_portd = 50001;
|
||||
remote_portd = 50001;
|
||||
local_rf = "yes"
|
||||
tr_preference = "udp_if4p5";
|
||||
nb_tx = 1;
|
||||
nb_rx = 1;
|
||||
max_pdschReferenceSignalPower = -29;
|
||||
max_rxgain = 120;
|
||||
bands = [38];
|
||||
is_slave = "no";
|
||||
}
|
||||
);
|
||||
|
||||
log_config = {
|
||||
global_log_level ="info";
|
||||
global_log_verbosity ="medium";
|
||||
hw_log_level ="info";
|
||||
hw_log_verbosity ="medium";
|
||||
phy_log_level ="info";
|
||||
phy_log_verbosity ="medium";
|
||||
mac_log_level ="info";
|
||||
mac_log_verbosity ="high";
|
||||
rlc_log_level ="info";
|
||||
rlc_log_verbosity ="medium";
|
||||
pdcp_log_level ="info";
|
||||
pdcp_log_verbosity ="medium";
|
||||
rrc_log_level ="info";
|
||||
rrc_log_verbosity ="medium";
|
||||
};
|
||||
|
||||
+11
-18
@@ -1717,19 +1717,12 @@ static void* ru_thread( void* param ) {
|
||||
first_phy_tx = 0;
|
||||
#endif
|
||||
|
||||
/*
|
||||
LOG_D(PHY,"AFTER fh_south_in - SFN/SF:%d%d RU->proc[RX:%d%d TX:%d%d] RC.eNB[0][0]:[RX:%d%d TX(SFN):%d]\n",
|
||||
frame,subframe,
|
||||
proc->frame_rx,proc->subframe_rx,
|
||||
proc->frame_tx,proc->subframe_tx,
|
||||
RC.eNB[0][0]->proc.frame_rx,RC.eNB[0][0]->proc.subframe_rx,
|
||||
RC.eNB[0][0]->proc.frame_tx);
|
||||
|
||||
LOG_D(PHY,"RU thread (do_prach %d, is_prach_subframe %d), received frame %d, subframe %d\n",
|
||||
ru->do_prach,
|
||||
is_prach_subframe(fp, proc->frame_rx, proc->subframe_rx),
|
||||
proc->frame_rx,proc->subframe_rx);
|
||||
*/
|
||||
|
||||
if ((ru->do_prach>0) && (is_prach_subframe(fp, proc->frame_rx, proc->subframe_rx)==1)) {
|
||||
wakeup_prach_ru(ru);
|
||||
}
|
||||
@@ -1782,7 +1775,7 @@ static void* ru_thread( void* param ) {
|
||||
if (ru->num_eNB>0) wakeup_eNBs(ru);
|
||||
|
||||
#ifndef PHY_TX_THREAD
|
||||
if(get_nprocs() <= 4){
|
||||
if(get_nprocs() <= 4 || ru->num_eNB==0){
|
||||
// do TX front-end processing if needed (precoding and/or IDFTs)
|
||||
if (ru->feptx_prec) ru->feptx_prec(ru);
|
||||
|
||||
@@ -2460,12 +2453,12 @@ void configure_rru(int idx,
|
||||
ru->frame_parms.dl_CarrierFreq = config->tx_freq[0];
|
||||
ru->frame_parms.ul_CarrierFreq = config->rx_freq[0];
|
||||
if (ru->frame_parms.dl_CarrierFreq == ru->frame_parms.ul_CarrierFreq) {
|
||||
ru->frame_parms.frame_type = TDD;
|
||||
ru->frame_parms.tdd_config = config->tdd_config[0];
|
||||
ru->frame_parms.tdd_config_S = config->tdd_config_S[0];
|
||||
LOG_I(PHY,"Setting RRU to TDD frame type\n");
|
||||
ru->frame_parms.frame_type = TDD;
|
||||
ru->frame_parms.tdd_config = config->tdd_config[0];
|
||||
ru->frame_parms.tdd_config_S = config->tdd_config_S[0];
|
||||
}
|
||||
else
|
||||
ru->frame_parms.frame_type = FDD;
|
||||
else ru->frame_parms.frame_type = FDD;
|
||||
ru->att_tx = config->att_tx[0];
|
||||
ru->att_rx = config->att_rx[0];
|
||||
ru->frame_parms.N_RB_DL = config->N_RB_DL[0];
|
||||
@@ -2473,9 +2466,9 @@ void configure_rru(int idx,
|
||||
ru->frame_parms.threequarter_fs = config->threequarter_fs[0];
|
||||
ru->frame_parms.pdsch_config_common.referenceSignalPower = ru->max_pdschReferenceSignalPower-config->att_tx[0];
|
||||
if (ru->function==NGFI_RRU_IF4p5) {
|
||||
ru->frame_parms.att_rx = ru->att_rx;
|
||||
ru->frame_parms.att_tx = ru->att_tx;
|
||||
|
||||
ru->frame_parms.att_rx = ru->att_rx;
|
||||
ru->frame_parms.att_tx = ru->att_tx;
|
||||
|
||||
LOG_I(PHY,"Setting ru->function to NGFI_RRU_IF4p5, prach_FrequOffset %d, prach_ConfigIndex %d, att (%d,%d)\n",
|
||||
config->prach_FreqOffset[0],config->prach_ConfigIndex[0],ru->att_tx,ru->att_rx);
|
||||
ru->frame_parms.prach_config_common.prach_ConfigInfo.prach_FreqOffset = config->prach_FreqOffset[0];
|
||||
@@ -2828,7 +2821,7 @@ void RCconfig_RU(void) {
|
||||
|
||||
|
||||
|
||||
RC.ru_mask=(1<<NB_RU) - 1;
|
||||
RC.ru_mask=(1<<RC.nb_RU) - 1;
|
||||
printf("Set RU mask to %lx\n",RC.ru_mask);
|
||||
|
||||
for (j = 0; j < RC.nb_RU; j++) {
|
||||
|
||||
@@ -156,7 +156,8 @@ static char *itti_dump_file = NULL;
|
||||
int UE_scan = 1;
|
||||
int UE_scan_carrier = 0;
|
||||
runmode_t mode = normal_txrx;
|
||||
|
||||
int simL1flag;
|
||||
int snr_dB;
|
||||
FILE *input_fd=NULL;
|
||||
|
||||
|
||||
@@ -465,7 +466,7 @@ void *l2l1_task(void *arg) {
|
||||
switch (ITTI_MSG_ID(message_p)) {
|
||||
case INITIALIZE_MESSAGE:
|
||||
/* Start eNB thread */
|
||||
LOG_D(EMU, "L2L1 TASK received %s\n", ITTI_MSG_NAME(message_p));
|
||||
printf("L2L1 TASK received %s\n", ITTI_MSG_NAME(message_p));
|
||||
start_eNB = 1;
|
||||
break;
|
||||
|
||||
@@ -477,7 +478,7 @@ void *l2l1_task(void *arg) {
|
||||
break;
|
||||
|
||||
default:
|
||||
LOG_E(EMU, "Received unexpected message %s\n", ITTI_MSG_NAME(message_p));
|
||||
printf("Received unexpected message %s\n", ITTI_MSG_NAME(message_p));
|
||||
break;
|
||||
}
|
||||
} while (ITTI_MSG_ID(message_p) != INITIALIZE_MESSAGE);
|
||||
@@ -504,11 +505,11 @@ void *l2l1_task(void *arg) {
|
||||
break;
|
||||
|
||||
case MESSAGE_TEST:
|
||||
LOG_I(EMU, "Received %s\n", ITTI_MSG_NAME(message_p));
|
||||
printf("Received %s\n", ITTI_MSG_NAME(message_p));
|
||||
break;
|
||||
|
||||
default:
|
||||
LOG_E(EMU, "Received unexpected message %s\n", ITTI_MSG_NAME(message_p));
|
||||
printf("Received unexpected message %s\n", ITTI_MSG_NAME(message_p));
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -573,8 +574,7 @@ static void get_options(void) {
|
||||
/* Read RC configuration file */
|
||||
RCConfig();
|
||||
NB_eNB_INST = RC.nb_inst;
|
||||
NB_RU = RC.nb_RU;
|
||||
printf("Configuration: nb_rrc_inst %d, nb_L1_inst %d, nb_ru %d\n",NB_eNB_INST,RC.nb_L1_inst,NB_RU);
|
||||
printf("Configuration: nb_rrc_inst %d, nb_L1_inst %d, nb_ru %d\n",NB_eNB_INST,RC.nb_L1_inst,RC.nb_RU);
|
||||
if (nonbiotflag <= 0) {
|
||||
load_NB_IoT();
|
||||
printf(" nb_nbiot_rrc_inst %d, nb_nbiot_L1_inst %d, nb_nbiot_macrlc_inst %d\n",
|
||||
@@ -1293,7 +1293,7 @@ int main( int argc, char **argv )
|
||||
}
|
||||
|
||||
stop_eNB(NB_eNB_INST);
|
||||
stop_RU(NB_RU);
|
||||
stop_RU(RC.nb_RU);
|
||||
/* release memory used by the RU/eNB threads (incomplete), after all
|
||||
* threads have been stopped (they partially use the same memory) */
|
||||
for (int inst = 0; inst < NB_eNB_INST; inst++) {
|
||||
@@ -1302,7 +1302,7 @@ int main( int argc, char **argv )
|
||||
phy_free_lte_eNB(RC.eNB[inst][cc_id]);
|
||||
}
|
||||
}
|
||||
for (int inst = 0; inst < NB_RU; inst++) {
|
||||
for (int inst = 0; inst < RC.nb_RU; inst++) {
|
||||
phy_free_RU(RC.ru[inst]);
|
||||
}
|
||||
free_lte_top();
|
||||
@@ -1321,7 +1321,8 @@ int main( int argc, char **argv )
|
||||
|
||||
// *** Handle per CC_id openair0
|
||||
|
||||
for(ru_id=0; ru_id<NB_RU; ru_id++) {
|
||||
|
||||
for(ru_id=0; ru_id<RC.nb_RU; ru_id++) {
|
||||
if (RC.ru[ru_id]->rfdevice.trx_end_func) {
|
||||
RC.ru[ru_id]->rfdevice.trx_end_func(&RC.ru[ru_id]->rfdevice);
|
||||
RC.ru[ru_id]->rfdevice.trx_end_func = NULL;
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
#include <sys/sysinfo.h>
|
||||
#include "rt_wrapper.h"
|
||||
#include "../../ARCH/COMMON/common_lib.h"
|
||||
#undef MALLOC
|
||||
//#undef MALLOC
|
||||
#include "assertions.h"
|
||||
#include "msc.h"
|
||||
#include "PHY/types.h"
|
||||
@@ -52,6 +52,8 @@
|
||||
#define CONFIG_HLP_DBGUEPR "UE run normal prach power ramping, but don't continue random-access\n"
|
||||
#define CONFIG_HLP_CALPRACH "UE run normal prach with maximum power, but don't continue random-access\n"
|
||||
#define CONFIG_HLP_NOL2CN "bypass L2 and upper layers\n"
|
||||
#define CONFIG_HLP_SIML1 "activate RF simulator instead of HW\n"
|
||||
#define CONFIG_HLP_NUMUE "number of UE instances\n"
|
||||
#define CONFIG_HLP_UERXG "set UE RX gain\n"
|
||||
#define CONFIG_HLP_UERXGOFF "external UE amplifier offset\n"
|
||||
#define CONFIG_HLP_UETXG "set UE TX gain\n"
|
||||
@@ -80,6 +82,7 @@
|
||||
#define CONFIG_HLP_MSLOTS "Skip the missed slots/subframes \n"
|
||||
#define CONFIG_HLP_ULMCS "Set the maximum uplink MCS\n"
|
||||
#define CONFIG_HLP_TDD "Set hardware to TDD mode (default: FDD). Used only with -U (otherwise set in config file).\n"
|
||||
#define CONFIG_HLP_SNR "Set average SNR in dB (for --siml1 option)\n"
|
||||
#define CONFIG_HLP_UE "Set the lte softmodem as a UE\n"
|
||||
#define CONFIG_HLP_L2MONW "Enable L2 wireshark messages on localhost \n"
|
||||
#define CONFIG_HLP_L2MONP "Enable L2 pcap messages on localhost \n"
|
||||
@@ -131,15 +134,17 @@
|
||||
/* optname helpstr paramflags XXXptr defXXXval type numelt */
|
||||
/*--------------------------------------------------------------------------------------------------------------------------------------------------*/
|
||||
#define CMDLINE_UEPARAMS_DESC { \
|
||||
{"ue-rxgain", CONFIG_HLP_UERXG, 0, dblptr:&(rx_gain[0][0]), defdblval:0, TYPE_DOUBLE, 0}, \
|
||||
{"siml1", CONFIG_HLP_SIML1, PARAMFLAG_BOOL, iptr:&simL1flag, defintval:0, TYPE_INT, 0}, \
|
||||
{"U", CONFIG_HLP_NUMUE, 0, u8ptr:&NB_UE_INST, defuintval:1, TYPE_UINT, 0}, \
|
||||
{"ue-rxgain", CONFIG_HLP_UERXG, 0, dblptr:&(rx_gain[0][0]), defdblval:130, TYPE_DOUBLE, 0}, \
|
||||
{"ue-rxgain-off", CONFIG_HLP_UERXGOFF, 0, dblptr:&rx_gain_off, defdblval:0, TYPE_DOUBLE, 0}, \
|
||||
{"ue-txgain", CONFIG_HLP_UETXG, 0, dblptr:&(tx_gain[0][0]), defdblval:0, TYPE_DOUBLE, 0}, \
|
||||
{"ue-nb-ant-rx", CONFIG_HLP_UENANTR, 0, u8ptr:&nb_antenna_rx, defuintval:1, TYPE_UINT8, 0}, \
|
||||
{"ue-nb-ant-tx", CONFIG_HLP_UENANTT, 0, u8ptr:&nb_antenna_tx, defuintval:1, TYPE_UINT8, 0}, \
|
||||
{"ue-scan-carrier", CONFIG_HLP_UESCAN, PARAMFLAG_BOOL, iptr:&UE_scan_carrier, defintval:0, TYPE_INT, 0}, \
|
||||
{"ue-max-power", NULL, 0, iptr:&(tx_max_power[0]), defintval:90, TYPE_INT, 0}, \
|
||||
{"emul-iface", CONFIG_HLP_EMULIFACE, 0, strptr:&emul_iface, defstrval:"lo", TYPE_STRING, 100}, \
|
||||
{"L2-emul", NULL, 0, u8ptr:&nfapi_mode, defuintval:3, TYPE_UINT8, 0}, \
|
||||
{"ue-max-power", NULL, 0, iptr:&(tx_max_power[0]), defintval:23, TYPE_INT, 0}, \
|
||||
{"emul-iface", CONFIG_HLP_EMULIFACE, 0, strptr:&emul_iface, defstrval:"lo", TYPE_STRING, 100}, \
|
||||
{"L2-emul", NULL, 0, u8ptr:&nfapi_mode, defuintval:3, TYPE_UINT8, 0}, \
|
||||
{"num-ues", NULL, 0, u8ptr:&(NB_UE_INST), defuintval:1, TYPE_UINT8, 0}, \
|
||||
{"r" , CONFIG_HLP_PRB, 0, u8ptr:&(frame_parms[0]->N_RB_DL), defintval:25, TYPE_UINT8, 0}, \
|
||||
{"dlsch-demod-shift", CONFIG_HLP_DLSHIFT, 0, iptr:(int32_t *)&dlsch_demod_shift, defintval:0, TYPE_INT, 0}, \
|
||||
@@ -181,6 +186,7 @@
|
||||
{"q" , CONFIG_HLP_STMON, PARAMFLAG_BOOL, iptr:&opp_enabled, defintval:0, TYPE_INT, 0}, \
|
||||
{"S" , CONFIG_HLP_MSLOTS, PARAMFLAG_BOOL, u8ptr:&exit_missed_slots, defintval:1, TYPE_UINT8, 0}, \
|
||||
{"T" , CONFIG_HLP_TDD, PARAMFLAG_BOOL, iptr:&tddflag, defintval:0, TYPE_INT, 0}, \
|
||||
{"s" , CONFIG_HLP_SNR, 0, iptr:&snr_dB, defintval:25, TYPE_INT, 0}, \
|
||||
{"numerology" , CONFIG_HLP_NUMEROLOGY, PARAMFLAG_BOOL, iptr:&numerology, defintval:0, TYPE_INT, 0}, \
|
||||
{"emulate-rf" , CONFIG_HLP_EMULATE_RF, PARAMFLAG_BOOL, iptr:&emulate_rf, defintval:0, TYPE_INT, 0}, \
|
||||
{"codingw" , CONFIG_HLP_CODINGW, PARAMFLAG_BOOL, iptr:&codingw, defintval:0, TYPE_INT, 0}, \
|
||||
@@ -259,7 +265,7 @@ extern void set_function_spec_param(RU_t *ru);
|
||||
extern int setup_ue_buffers(PHY_VARS_UE **phy_vars_ue, openair0_config_t *openair0_cfg);
|
||||
extern void fill_ue_band_info(void);
|
||||
|
||||
extern void init_UE(int,int,int,int);
|
||||
extern void init_UE(int nb_inst,int eMBMS_active, int uecap_xer_in, int timing_correction, int phy_test, int UE_scan, int UE_scan_carrier, runmode_t mode,int rxgain,int txpowermax, int nb_rx, int nb_tx);
|
||||
extern void init_thread(int sched_runtime, int sched_deadline, int sched_fifo, cpu_set_t *cpuset, char * name);
|
||||
|
||||
extern void reset_opp_meas(void);
|
||||
@@ -271,6 +277,10 @@ extern void init_te_thread(PHY_VARS_eNB *);
|
||||
extern void kill_td_thread(PHY_VARS_eNB *);
|
||||
extern void kill_te_thread(PHY_VARS_eNB *);
|
||||
|
||||
extern void RCConfig_sim(void);
|
||||
extern void init_ocm(double,double);
|
||||
extern void init_ue_devices(PHY_VARS_UE *);
|
||||
|
||||
PHY_VARS_UE* init_ue_vars(LTE_DL_FRAME_PARMS *frame_parms,
|
||||
uint8_t UE_id,
|
||||
uint8_t abstraction_flag);
|
||||
@@ -279,4 +289,11 @@ void init_eNB_afterRU(void);
|
||||
extern int stop_L1L2(module_id_t enb_id);
|
||||
extern int restart_L1L2(module_id_t enb_id);
|
||||
|
||||
|
||||
extern void init_UE_stub_single_thread(int nb_inst,int eMBMS_active, int uecap_xer_in, char *emul_iface);
|
||||
|
||||
extern PHY_VARS_UE* init_ue_vars(LTE_DL_FRAME_PARMS *frame_parms,
|
||||
uint8_t UE_id,
|
||||
uint8_t abstraction_flag);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -79,7 +79,7 @@ void init_UE_threads(int);
|
||||
void init_UE_threads_stub(int);
|
||||
void init_UE_single_thread_stub(int);
|
||||
void *UE_thread(void *arg);
|
||||
void init_UE(int nb_inst,int,int,int);
|
||||
void init_UE(int nb_inst,int eMBMS_active, int uecap_xer_in, int timing_correction, int phy_test, int UE_scan, int UE_scan_carrier, runmode_t mode,int rxgain,int txpowermax,int nb_rx,int nb_tx);
|
||||
void init_UE_stub(int nb_inst,int,int,char*);
|
||||
void init_UE_stub_single_thread(int nb_inst,int,int,char*);
|
||||
int init_timer_thread(void);
|
||||
@@ -93,6 +93,8 @@ extern int oai_nfapi_sr_indication(nfapi_sr_indication_t *ind);
|
||||
extern int oai_nfapi_rx_ind(nfapi_rx_indication_t *ind);
|
||||
extern int multicast_link_write_sock(int groupP, char *dataP, uint32_t sizeP);
|
||||
|
||||
extern int simL1flag;
|
||||
|
||||
//extern int tx_req_UE_MAC1();
|
||||
|
||||
void ue_stub_rx_handler(unsigned int, char *);
|
||||
@@ -236,11 +238,12 @@ void init_thread(int sched_runtime, int sched_deadline, int sched_fifo, cpu_set_
|
||||
|
||||
}
|
||||
|
||||
void init_UE(int nb_inst,int eMBMS_active, int uecap_xer_in, int timing_correction) {
|
||||
void init_UE(int nb_inst,int eMBMS_active, int uecap_xer_in, int timing_correction, int phy_test, int UE_scan, int UE_scan_carrier, runmode_t mode,int rxgain,int txpowermax,int nb_rx,int nb_tx) {
|
||||
|
||||
PHY_VARS_UE *UE;
|
||||
int inst;
|
||||
int ret;
|
||||
LTE_DL_FRAME_PARMS *fp;
|
||||
|
||||
LOG_I(PHY,"UE : Calling Layer 2 for initialization\n");
|
||||
|
||||
@@ -248,18 +251,95 @@ void init_UE(int nb_inst,int eMBMS_active, int uecap_xer_in, int timing_correcti
|
||||
0,// cba_group_active
|
||||
0); // HO flag
|
||||
|
||||
if (PHY_vars_UE_g==NULL) PHY_vars_UE_g = (PHY_VARS_UE***)calloc(1+nb_inst,sizeof(PHY_VARS_UE**));
|
||||
|
||||
for (inst=0;inst<nb_inst;inst++) {
|
||||
if (PHY_vars_UE_g[inst]==NULL) PHY_vars_UE_g[inst] = (PHY_VARS_UE**)calloc(1+MAX_NUM_CCs,sizeof(PHY_VARS_UE*));
|
||||
LOG_I(PHY,"Allocating UE context %d\n",inst);
|
||||
|
||||
LOG_I(PHY,"Initializing memory for UE instance %d (%p)\n",inst,PHY_vars_UE_g[inst]);
|
||||
PHY_vars_UE_g[inst][0] = init_ue_vars(NULL,inst,0);
|
||||
if (simL1flag == 0) PHY_vars_UE_g[inst][0] = init_ue_vars(NULL,inst,0);
|
||||
else {
|
||||
// needed for memcopy below. these are not used in the RU, but needed for UE
|
||||
RC.ru[0]->frame_parms.nb_antennas_rx = nb_rx;
|
||||
RC.ru[0]->frame_parms.nb_antennas_tx = nb_tx;
|
||||
PHY_vars_UE_g[inst][0] = init_ue_vars(&RC.ru[0]->frame_parms,inst,0);
|
||||
}
|
||||
// turn off timing control loop in UE
|
||||
PHY_vars_UE_g[inst][0]->no_timing_correction = timing_correction;
|
||||
|
||||
UE = PHY_vars_UE_g[inst][0];
|
||||
fp = &UE->frame_parms;
|
||||
printf("PHY_vars_UE_g[0][0] = %p\n",UE);
|
||||
|
||||
if (phy_test==1)
|
||||
UE->mac_enabled = 0;
|
||||
else
|
||||
UE->mac_enabled = 1;
|
||||
|
||||
if (UE->mac_enabled == 0) { //set default UL parameters for testing mode
|
||||
for (int i=0; i<NUMBER_OF_CONNECTED_eNB_MAX; i++) {
|
||||
UE->pusch_config_dedicated[i].betaOffset_ACK_Index = 0;
|
||||
UE->pusch_config_dedicated[i].betaOffset_RI_Index = 0;
|
||||
UE->pusch_config_dedicated[i].betaOffset_CQI_Index = 2;
|
||||
|
||||
UE->scheduling_request_config[i].sr_PUCCH_ResourceIndex = 0;
|
||||
UE->scheduling_request_config[i].sr_ConfigIndex = 7+(0%3);
|
||||
UE->scheduling_request_config[i].dsr_TransMax = sr_n4;
|
||||
}
|
||||
}
|
||||
|
||||
UE->UE_scan = UE_scan;
|
||||
UE->UE_scan_carrier = UE_scan_carrier;
|
||||
UE->mode = mode;
|
||||
printf("UE->mode = %d\n",mode);
|
||||
|
||||
if (UE->mac_enabled == 1) {
|
||||
UE->pdcch_vars[0][0]->crnti = 0x1234;
|
||||
UE->pdcch_vars[1][0]->crnti = 0x1234;
|
||||
}else {
|
||||
UE->pdcch_vars[0][0]->crnti = 0x1235;
|
||||
UE->pdcch_vars[1][0]->crnti = 0x1235;
|
||||
}
|
||||
UE->rx_total_gain_dB = rxgain;
|
||||
UE->tx_power_max_dBm = txpowermax;
|
||||
|
||||
UE->frame_parms.nb_antennas_tx = nb_tx;
|
||||
UE->frame_parms.nb_antennas_rx = nb_rx;
|
||||
|
||||
if (fp->frame_type == TDD) {
|
||||
switch (fp->N_RB_DL) {
|
||||
|
||||
case 100:
|
||||
if (fp->threequarter_fs) UE->N_TA_offset = (624*3)/4;
|
||||
else UE->N_TA_offset = 624;
|
||||
break;
|
||||
case 75:
|
||||
UE->N_TA_offset = (624*3)/4;
|
||||
break;
|
||||
case 50:
|
||||
UE->N_TA_offset = 624/2;
|
||||
break;
|
||||
case 25:
|
||||
UE->N_TA_offset = 624/4;
|
||||
break;
|
||||
case 15:
|
||||
UE->N_TA_offset = 624/8;
|
||||
break;
|
||||
case 6:
|
||||
UE->N_TA_offset = 624/16;
|
||||
break;
|
||||
default:
|
||||
AssertFatal(1==0,"illegal N_RB_DL %d\n",fp->N_RB_DL);
|
||||
break;
|
||||
}
|
||||
}
|
||||
else UE->N_TA_offset = 0;
|
||||
|
||||
if (simL1flag == 1) init_ue_devices(UE);
|
||||
LOG_I(PHY,"Intializing UE Threads for instance %d (%p,%p)...\n",inst,PHY_vars_UE_g[inst],PHY_vars_UE_g[inst][0]);
|
||||
init_UE_threads(inst);
|
||||
UE = PHY_vars_UE_g[inst][0];
|
||||
|
||||
if (oaisim_flag == 0) {
|
||||
if (simL1flag == 0) {
|
||||
ret = openair0_device_load(&(UE->rfdevice), &openair0_cfg[0]);
|
||||
if (ret !=0){
|
||||
exit_fun("Error loading device library");
|
||||
@@ -267,7 +347,7 @@ void init_UE(int nb_inst,int eMBMS_active, int uecap_xer_in, int timing_correcti
|
||||
}
|
||||
UE->rfdevice.host_type = RAU_HOST;
|
||||
// UE->rfdevice.type = NONE_DEV;
|
||||
PHY_VARS_UE *UE = PHY_vars_UE_g[inst][0];
|
||||
|
||||
AssertFatal(0 == pthread_create(&UE->proc.pthread_ue,
|
||||
&UE->proc.attr_ue,
|
||||
UE_thread,
|
||||
@@ -435,9 +515,12 @@ static void *UE_thread_synch(void *arg)
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
while (sync_var<0)
|
||||
pthread_cond_wait(&sync_cond, &sync_mutex);
|
||||
pthread_mutex_unlock(&sync_mutex);
|
||||
*/
|
||||
wait_sync("UE_thread_sync");
|
||||
|
||||
printf("Started device, unlocked sync_mutex (UE_sync_thread)\n");
|
||||
|
||||
@@ -1411,6 +1494,13 @@ void *UE_thread(void *arg) {
|
||||
init_thread(100000, 500000, FIFO_PRIORITY, &cpuset,
|
||||
"UHD Threads");
|
||||
|
||||
/*
|
||||
while (sync_var<0)
|
||||
pthread_cond_wait(&sync_cond, &sync_mutex);
|
||||
pthread_mutex_unlock(&sync_mutex);
|
||||
*/
|
||||
|
||||
wait_sync("UE thread");
|
||||
#ifdef NAS_UE
|
||||
MessageDef *message_p;
|
||||
message_p = itti_alloc_new_message(TASK_NAS_UE, INITIALIZE_MESSAGE);
|
||||
|
||||
@@ -63,7 +63,6 @@
|
||||
#include "PHY/LTE_TRANSPORT/transport_vars.h"
|
||||
#include "SCHED/sched_common_vars.h"
|
||||
#include "PHY/MODULATION/modulation_vars.h"
|
||||
#include "../../SIMU/USER/init_lte.h"
|
||||
|
||||
#include "LAYER2/MAC/mac.h"
|
||||
#include "LAYER2/MAC/mac_vars.h"
|
||||
@@ -156,6 +155,9 @@ static char *itti_dump_file = NULL;
|
||||
|
||||
int UE_scan = 1;
|
||||
int UE_scan_carrier = 0;
|
||||
int simL1flag = 0;
|
||||
int snr_dB=25;
|
||||
|
||||
runmode_t mode = normal_txrx;
|
||||
|
||||
FILE *input_fd=NULL;
|
||||
@@ -164,11 +166,11 @@ FILE *input_fd=NULL;
|
||||
#if MAX_NUM_CCs == 1
|
||||
rx_gain_t rx_gain_mode[MAX_NUM_CCs][4] = {{max_gain,max_gain,max_gain,max_gain}};
|
||||
double tx_gain[MAX_NUM_CCs][4] = {{20,0,0,0}};
|
||||
double rx_gain[MAX_NUM_CCs][4] = {{110,0,0,0}};
|
||||
double rx_gain[MAX_NUM_CCs][4] = {{130,0,0,0}};
|
||||
#else
|
||||
rx_gain_t rx_gain_mode[MAX_NUM_CCs][4] = {{max_gain,max_gain,max_gain,max_gain},{max_gain,max_gain,max_gain,max_gain}};
|
||||
double tx_gain[MAX_NUM_CCs][4] = {{20,0,0,0},{20,0,0,0}};
|
||||
double rx_gain[MAX_NUM_CCs][4] = {{110,0,0,0},{20,0,0,0}};
|
||||
double rx_gain[MAX_NUM_CCs][4] = {{130,0,0,0},{20,0,0,0}};
|
||||
#endif
|
||||
|
||||
double rx_gain_off = 0.0;
|
||||
@@ -212,8 +214,6 @@ uint8_t exit_missed_slots=1;
|
||||
uint64_t num_missed_slots=0; // counter for the number of missed slots
|
||||
|
||||
|
||||
extern void reset_opp_meas(void);
|
||||
extern void print_opp_meas(void);
|
||||
extern void init_UE_stub_single_thread(int nb_inst,int eMBMS_active, int uecap_xer_in, char *emul_iface);
|
||||
|
||||
extern PHY_VARS_UE* init_ue_vars(LTE_DL_FRAME_PARMS *frame_parms,
|
||||
@@ -452,11 +452,11 @@ void *l2l1_task(void *arg) {
|
||||
break;
|
||||
|
||||
case MESSAGE_TEST:
|
||||
LOG_I(EMU, "Received %s\n", ITTI_MSG_NAME(message_p));
|
||||
LOG_I(SIM, "Received %s\n", ITTI_MSG_NAME(message_p));
|
||||
break;
|
||||
|
||||
default:
|
||||
LOG_E(EMU, "Received unexpected message %s\n", ITTI_MSG_NAME(message_p));
|
||||
LOG_E(SIM, "Received unexpected message %s\n", ITTI_MSG_NAME(message_p));
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -540,8 +540,7 @@ static void get_options(void) {
|
||||
}
|
||||
UE_scan=0;
|
||||
|
||||
|
||||
if (tddflag > 0) {
|
||||
if (tddflag > 0) {
|
||||
for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++)
|
||||
frame_parms[CC_id]->frame_type = TDD;
|
||||
}
|
||||
@@ -573,12 +572,11 @@ static void get_options(void) {
|
||||
|
||||
|
||||
for (CC_id=1;CC_id<MAX_NUM_CCs;CC_id++) {
|
||||
tx_max_power[CC_id]=tx_max_power[0];
|
||||
rx_gain[0][CC_id] = rx_gain[0][0];
|
||||
tx_gain[0][CC_id] = tx_gain[0][0];
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
if ( !(CONFIG_ISFLAGSET(CONFIG_ABORT)) && (!(CONFIG_ISFLAGSET(CONFIG_NOOOPT))) ) {
|
||||
// Here the configuration file is the XER encoded UE capabilities
|
||||
// Read it in and store in asn1c data structures
|
||||
@@ -586,7 +584,7 @@ static void get_options(void) {
|
||||
printf("%s\n",uecap_xer);
|
||||
if(nfapi_mode!=3)
|
||||
uecap_xer_in=1;
|
||||
} /* UE with config file */
|
||||
} *//* UE with config file */
|
||||
}
|
||||
|
||||
|
||||
@@ -637,7 +635,7 @@ void set_default_frame_parms(LTE_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs]) {
|
||||
|
||||
}
|
||||
|
||||
void init_openair0(void) {
|
||||
void init_openair0(LTE_DL_FRAME_PARMS *frame_parms,int rxgain) {
|
||||
|
||||
int card;
|
||||
int i;
|
||||
@@ -647,8 +645,8 @@ void init_openair0(void) {
|
||||
openair0_cfg[card].mmapped_dma=mmapped_dma;
|
||||
openair0_cfg[card].configFilename = NULL;
|
||||
|
||||
if(frame_parms[0]->N_RB_DL == 100) {
|
||||
if (frame_parms[0]->threequarter_fs) {
|
||||
if(frame_parms->N_RB_DL == 100) {
|
||||
if (frame_parms->threequarter_fs) {
|
||||
openair0_cfg[card].sample_rate=23.04e6;
|
||||
openair0_cfg[card].samples_per_frame = 230400;
|
||||
openair0_cfg[card].tx_bw = 10e6;
|
||||
@@ -659,17 +657,17 @@ void init_openair0(void) {
|
||||
openair0_cfg[card].tx_bw = 10e6;
|
||||
openair0_cfg[card].rx_bw = 10e6;
|
||||
}
|
||||
} else if(frame_parms[0]->N_RB_DL == 50) {
|
||||
} else if(frame_parms->N_RB_DL == 50) {
|
||||
openair0_cfg[card].sample_rate=15.36e6;
|
||||
openair0_cfg[card].samples_per_frame = 153600;
|
||||
openair0_cfg[card].tx_bw = 5e6;
|
||||
openair0_cfg[card].rx_bw = 5e6;
|
||||
} else if (frame_parms[0]->N_RB_DL == 25) {
|
||||
} else if (frame_parms->N_RB_DL == 25) {
|
||||
openair0_cfg[card].sample_rate=7.68e6;
|
||||
openair0_cfg[card].samples_per_frame = 76800;
|
||||
openair0_cfg[card].tx_bw = 2.5e6;
|
||||
openair0_cfg[card].rx_bw = 2.5e6;
|
||||
} else if (frame_parms[0]->N_RB_DL == 6) {
|
||||
} else if (frame_parms->N_RB_DL == 6) {
|
||||
openair0_cfg[card].sample_rate=1.92e6;
|
||||
openair0_cfg[card].samples_per_frame = 19200;
|
||||
openair0_cfg[card].tx_bw = 1.5e6;
|
||||
@@ -679,23 +677,20 @@ void init_openair0(void) {
|
||||
|
||||
|
||||
|
||||
if (frame_parms[0]->frame_type==TDD)
|
||||
if (frame_parms->frame_type==TDD)
|
||||
openair0_cfg[card].duplex_mode = duplex_mode_TDD;
|
||||
else //FDD
|
||||
openair0_cfg[card].duplex_mode = duplex_mode_FDD;
|
||||
|
||||
printf("HW: Configuring card %d, nb_antennas_tx/rx %d/%d\n",card,
|
||||
PHY_vars_UE_g[0][0]->frame_parms.nb_antennas_tx,
|
||||
PHY_vars_UE_g[0][0]->frame_parms.nb_antennas_rx);
|
||||
openair0_cfg[card].Mod_id = 0;
|
||||
|
||||
openair0_cfg[card].num_rb_dl=frame_parms[0]->N_RB_DL;
|
||||
openair0_cfg[card].num_rb_dl=frame_parms->N_RB_DL;
|
||||
|
||||
openair0_cfg[card].clock_source = clock_source;
|
||||
|
||||
|
||||
openair0_cfg[card].tx_num_channels=min(2,PHY_vars_UE_g[0][0]->frame_parms.nb_antennas_tx);
|
||||
openair0_cfg[card].rx_num_channels=min(2,PHY_vars_UE_g[0][0]->frame_parms.nb_antennas_rx);
|
||||
openair0_cfg[card].tx_num_channels=min(2,frame_parms->nb_antennas_tx);
|
||||
openair0_cfg[card].rx_num_channels=min(2,frame_parms->nb_antennas_rx);
|
||||
|
||||
for (i=0; i<4; i++) {
|
||||
|
||||
@@ -711,7 +706,7 @@ void init_openair0(void) {
|
||||
|
||||
openair0_cfg[card].autocal[i] = 1;
|
||||
openair0_cfg[card].tx_gain[i] = tx_gain[0][i];
|
||||
openair0_cfg[card].rx_gain[i] = PHY_vars_UE_g[0][0]->rx_total_gain_dB - rx_gain_off;
|
||||
openair0_cfg[card].rx_gain[i] = rxgain - rx_gain_off;
|
||||
|
||||
|
||||
openair0_cfg[card].configFilename = rf_config_file;
|
||||
@@ -771,14 +766,12 @@ int restart_L1L2(module_id_t enb_id)
|
||||
|
||||
int main( int argc, char **argv )
|
||||
{
|
||||
int i;
|
||||
#if defined (XFORMS)
|
||||
void *status;
|
||||
#endif
|
||||
|
||||
int CC_id;
|
||||
uint8_t abstraction_flag=0;
|
||||
uint8_t beta_ACK=0,beta_RI=0,beta_CQI=2;
|
||||
|
||||
// Default value for the number of UEs. It will hold,
|
||||
// if not changed from the command line option --num-ues
|
||||
@@ -798,12 +791,10 @@ int main( int argc, char **argv )
|
||||
setvbuf(stderr, NULL, _IONBF, 0);
|
||||
#endif
|
||||
|
||||
PHY_VARS_UE *UE[MAX_NUM_CCs];
|
||||
|
||||
mode = normal_txrx;
|
||||
memset(&openair0_cfg[0],0,sizeof(openair0_config_t)*MAX_CARDS);
|
||||
|
||||
memset(tx_max_power,0,sizeof(int)*MAX_NUM_CCs);
|
||||
|
||||
set_latency_target();
|
||||
|
||||
@@ -811,8 +802,16 @@ int main( int argc, char **argv )
|
||||
|
||||
printf("Reading in command-line options\n");
|
||||
|
||||
for (int i=0;i<MAX_NUM_CCs;i++) tx_max_power[i]=23;
|
||||
get_options ();
|
||||
|
||||
|
||||
printf("Running with %d UE instances\n",NB_UE_INST);
|
||||
if (NB_UE_INST > 1 && simL1flag != 1) {
|
||||
printf("Running with more than 1 UE instance and simL1 is not active, this will result in undefined behaviour for now, exiting.\n");
|
||||
abort();
|
||||
}
|
||||
|
||||
printf("NFAPI_MODE value: %d \n", nfapi_mode);
|
||||
|
||||
// Not sure if the following is needed here
|
||||
@@ -846,7 +845,7 @@ int main( int argc, char **argv )
|
||||
set_comp_log(OTG, LOG_INFO, LOG_HIGH, 1);
|
||||
set_comp_log(RRC, LOG_INFO, LOG_HIGH, 1);
|
||||
#if defined(ENABLE_ITTI)
|
||||
set_comp_log(EMU, LOG_INFO, LOG_MED, 1);
|
||||
set_comp_log(SIM, LOG_INFO, LOG_MED, 1);
|
||||
# if defined(ENABLE_USE_MME)
|
||||
set_comp_log(NAS, LOG_INFO, LOG_HIGH, 1);
|
||||
# endif
|
||||
@@ -859,11 +858,15 @@ int main( int argc, char **argv )
|
||||
|
||||
cpuf=get_cpu_freq_GHz();
|
||||
|
||||
pthread_cond_init(&sync_cond,NULL);
|
||||
pthread_mutex_init(&sync_mutex, NULL);
|
||||
|
||||
#if defined(ENABLE_ITTI)
|
||||
|
||||
log_set_instance_type (LOG_INSTANCE_UE);
|
||||
|
||||
|
||||
|
||||
printf("ITTI init\n");
|
||||
itti_init(TASK_MAX, THREAD_MAX, MESSAGES_ID_MAX, tasks_info, messages_info, messages_definition_xml, itti_dump_file);
|
||||
|
||||
@@ -923,10 +926,6 @@ int main( int argc, char **argv )
|
||||
|
||||
|
||||
|
||||
printf("Before CC \n");
|
||||
|
||||
|
||||
//NB_UE_INST=1;
|
||||
NB_INST=1;
|
||||
if(nfapi_mode == 3){
|
||||
PHY_vars_UE_g = malloc(sizeof(PHY_VARS_UE**)*NB_UE_INST);
|
||||
@@ -935,80 +934,58 @@ int main( int argc, char **argv )
|
||||
PHY_vars_UE_g[i] = malloc(sizeof(PHY_VARS_UE*)*MAX_NUM_CCs);
|
||||
PHY_vars_UE_g[i][CC_id] = init_ue_vars(frame_parms[CC_id], i,abstraction_flag);
|
||||
|
||||
UE[CC_id] = PHY_vars_UE_g[i][CC_id];
|
||||
printf("PHY_vars_UE_g[inst][%d] = %p\n",CC_id,UE[CC_id]);
|
||||
|
||||
if (phy_test==1)
|
||||
UE[CC_id]->mac_enabled = 0;
|
||||
PHY_vars_UE_g[i][CC_id]->mac_enabled = 0;
|
||||
else
|
||||
UE[CC_id]->mac_enabled = 1;
|
||||
PHY_vars_UE_g[i][CC_id]->mac_enabled = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
else{
|
||||
else init_openair0(frame_parms[0],(int)rx_gain[0][0]);
|
||||
|
||||
|
||||
for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
|
||||
//NB_UE_INST=1;
|
||||
NB_INST=1;
|
||||
PHY_vars_UE_g = malloc(sizeof(PHY_VARS_UE**));
|
||||
PHY_vars_UE_g[0] = malloc(sizeof(PHY_VARS_UE*)*MAX_NUM_CCs);
|
||||
PHY_vars_UE_g[0][CC_id] = init_ue_vars(frame_parms[CC_id], 0,abstraction_flag);
|
||||
UE[CC_id] = PHY_vars_UE_g[0][CC_id];
|
||||
printf("PHY_vars_UE_g[0][%d] = %p\n",CC_id,UE[CC_id]);
|
||||
if (simL1flag==1) {
|
||||
AssertFatal(NULL!=load_configmodule(argc,argv),
|
||||
"[SOFTMODEM] Error, configuration module init failed\n");
|
||||
|
||||
if (phy_test==1)
|
||||
UE[CC_id]->mac_enabled = 0;
|
||||
else
|
||||
UE[CC_id]->mac_enabled = 1;
|
||||
RCConfig_sim();
|
||||
}
|
||||
|
||||
if (UE[CC_id]->mac_enabled == 0) { //set default UL parameters for testing mode
|
||||
for (i=0; i<NUMBER_OF_CONNECTED_eNB_MAX; i++) {
|
||||
UE[CC_id]->pusch_config_dedicated[i].betaOffset_ACK_Index = beta_ACK;
|
||||
UE[CC_id]->pusch_config_dedicated[i].betaOffset_RI_Index = beta_RI;
|
||||
UE[CC_id]->pusch_config_dedicated[i].betaOffset_CQI_Index = beta_CQI;
|
||||
|
||||
UE[CC_id]->scheduling_request_config[i].sr_PUCCH_ResourceIndex = 0;
|
||||
UE[CC_id]->scheduling_request_config[i].sr_ConfigIndex = 7+(0%3);
|
||||
UE[CC_id]->scheduling_request_config[i].dsr_TransMax = sr_n4;
|
||||
}
|
||||
}
|
||||
// start the main UE threads
|
||||
int eMBMS_active = 0;
|
||||
|
||||
UE[CC_id]->UE_scan = UE_scan;
|
||||
UE[CC_id]->UE_scan_carrier = UE_scan_carrier;
|
||||
UE[CC_id]->mode = mode;
|
||||
printf("UE[%d]->mode = %d\n",CC_id,mode);
|
||||
|
||||
if (UE[CC_id]->mac_enabled == 1) {
|
||||
UE[CC_id]->pdcch_vars[0][0]->crnti = 0x1234;
|
||||
UE[CC_id]->pdcch_vars[1][0]->crnti = 0x1234;
|
||||
}else {
|
||||
UE[CC_id]->pdcch_vars[0][0]->crnti = 0x1235;
|
||||
UE[CC_id]->pdcch_vars[1][0]->crnti = 0x1235;
|
||||
}
|
||||
UE[CC_id]->rx_total_gain_dB = (int)rx_gain[CC_id][0] + rx_gain_off;
|
||||
UE[CC_id]->tx_power_max_dBm = tx_max_power[CC_id];
|
||||
|
||||
if (frame_parms[CC_id]->frame_type==FDD) {
|
||||
UE[CC_id]->N_TA_offset = 0;
|
||||
}
|
||||
else {
|
||||
if (frame_parms[CC_id]->N_RB_DL == 100)
|
||||
UE[CC_id]->N_TA_offset = 624;
|
||||
else if (frame_parms[CC_id]->N_RB_DL == 50)
|
||||
UE[CC_id]->N_TA_offset = 624/2;
|
||||
else if (frame_parms[CC_id]->N_RB_DL == 25)
|
||||
UE[CC_id]->N_TA_offset = 624/4;
|
||||
|
||||
}
|
||||
init_openair0();
|
||||
if (nfapi_mode==3) // UE-STUB-PNF
|
||||
{
|
||||
config_sync_var=0;
|
||||
wait_nfapi_init("main?");
|
||||
//Panos: Temporarily we will be using single set of threads for multiple UEs.
|
||||
//init_UE_stub(1,eMBMS_active,uecap_xer_in,emul_iface);
|
||||
init_UE_stub_single_thread(NB_UE_INST,eMBMS_active,uecap_xer_in,emul_iface);
|
||||
}
|
||||
else {
|
||||
init_UE(NB_UE_INST,eMBMS_active,uecap_xer_in,0,phy_test,UE_scan,UE_scan_carrier,mode,(int)rx_gain[0][0],tx_max_power[0],
|
||||
frame_parms[0]->nb_antennas_rx,
|
||||
frame_parms[0]->nb_antennas_tx);
|
||||
}
|
||||
|
||||
|
||||
printf("Runtime table\n");
|
||||
fill_modeled_runtime_table(runtime_phy_rx,runtime_phy_tx);
|
||||
if (phy_test==0) {
|
||||
printf("Filling UE band info\n");
|
||||
fill_ue_band_info();
|
||||
dl_phy_sync_success (0, 0, 0, 1);
|
||||
}
|
||||
|
||||
if (nfapi_mode!=3){
|
||||
number_of_cards = 1;
|
||||
for(CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
|
||||
PHY_vars_UE_g[0][CC_id]->rf_map.card=0;
|
||||
PHY_vars_UE_g[0][CC_id]->rf_map.chain=CC_id+chain_offset;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
cpuf=get_cpu_freq_GHz();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1064,16 +1041,10 @@ int main( int argc, char **argv )
|
||||
printf("ITTI tasks created\n");
|
||||
#endif
|
||||
|
||||
// init UE_PF_PO and mutex lock
|
||||
pthread_mutex_init(&ue_pf_po_mutex, NULL);
|
||||
memset (&UE_PF_PO[0][0], 0, sizeof(UE_PF_PO_t)*MAX_MOBILES_PER_ENB*MAX_NUM_CCs);
|
||||
|
||||
mlockall(MCL_CURRENT | MCL_FUTURE);
|
||||
|
||||
pthread_cond_init(&sync_cond,NULL);
|
||||
pthread_mutex_init(&sync_mutex, NULL);
|
||||
|
||||
|
||||
rt_sleep_ns(10*100000000ULL);
|
||||
|
||||
const char *nfapi_mode_str = "<UNKNOWN>";
|
||||
@@ -1102,61 +1073,23 @@ int main( int argc, char **argv )
|
||||
printf("NFAPI MODE:%s\n", nfapi_mode_str);
|
||||
|
||||
|
||||
// start the main threads
|
||||
int eMBMS_active = 0;
|
||||
|
||||
if (nfapi_mode==3) // UE-STUB-PNF
|
||||
{
|
||||
config_sync_var=0;
|
||||
wait_nfapi_init("main?");
|
||||
// Temporarily we will be using single set of threads for multiple UEs.
|
||||
//init_UE_stub(1,eMBMS_active,uecap_xer_in,emul_iface);
|
||||
init_UE_stub_single_thread(NB_UE_INST,eMBMS_active,uecap_xer_in,emul_iface);
|
||||
}
|
||||
else {
|
||||
init_UE(1,eMBMS_active,uecap_xer_in,0);
|
||||
}
|
||||
|
||||
if (phy_test==0) {
|
||||
printf("Filling UE band info\n");
|
||||
fill_ue_band_info();
|
||||
dl_phy_sync_success (0, 0, 0, 1);
|
||||
}
|
||||
|
||||
if (nfapi_mode!=3){
|
||||
number_of_cards = 1;
|
||||
for(CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
|
||||
PHY_vars_UE_g[0][CC_id]->rf_map.card=0;
|
||||
PHY_vars_UE_g[0][CC_id]->rf_map.chain=CC_id+chain_offset;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// connect the TX/RX buffers
|
||||
|
||||
for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
|
||||
|
||||
|
||||
#ifdef OAI_USRP
|
||||
UE[CC_id]->hw_timing_advance = timing_advance;
|
||||
#else
|
||||
UE[CC_id]->hw_timing_advance = 160;
|
||||
#endif
|
||||
}
|
||||
/*
|
||||
if(nfapi_mode!=3) {
|
||||
if (setup_ue_buffers(UE,&openair0_cfg[0])!=0) {
|
||||
if (setup_ue_buffers(PHY_vars_UE_g[0],&openair0_cfg[0])!=0) {
|
||||
printf("Error setting up eNB buffer\n");
|
||||
exit(-1);
|
||||
}
|
||||
}
|
||||
|
||||
*/
|
||||
|
||||
|
||||
|
||||
if (input_fd) {
|
||||
printf("Reading in from file to antenna buffer %d\n",0);
|
||||
if (fread(UE[0]->common_vars.rxdata[0],
|
||||
if (fread(PHY_vars_UE_g[0][0]->common_vars.rxdata[0],
|
||||
sizeof(int32_t),
|
||||
frame_parms[0]->samples_per_tti*10,
|
||||
input_fd) != frame_parms[0]->samples_per_tti*10)
|
||||
@@ -1164,6 +1097,14 @@ int main( int argc, char **argv )
|
||||
}
|
||||
//p_exmimo_config->framing.tdd_config = TXRXSWITCH_TESTRX;
|
||||
|
||||
|
||||
if (simL1flag==1) {
|
||||
init_ocm((double)snr_dB,0);
|
||||
PHY_vars_UE_g[0][0]->no_timing_correction = 1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
#ifdef XFORMS
|
||||
int UE_id;
|
||||
|
||||
@@ -1199,20 +1140,25 @@ int main( int argc, char **argv )
|
||||
|
||||
#endif
|
||||
|
||||
printf("Sending sync to all threads\n");
|
||||
printf("Sending sync to all threads (%p,%p,%p)\n",&sync_var,&sync_cond,&sync_mutex);
|
||||
|
||||
|
||||
pthread_mutex_lock(&sync_mutex);
|
||||
sync_var=0;
|
||||
pthread_cond_broadcast(&sync_cond);
|
||||
pthread_mutex_unlock(&sync_mutex);
|
||||
|
||||
printf("sync sent\n");
|
||||
/*
|
||||
printf("About to call end_configmodule() from %s() %s:%d\n", __FUNCTION__, __FILE__, __LINE__);
|
||||
end_configmodule();
|
||||
printf("Called end_configmodule() from %s() %s:%d\n", __FUNCTION__, __FILE__, __LINE__);
|
||||
|
||||
*/
|
||||
// wait for end of program
|
||||
printf("TYPE <CTRL-C> TO TERMINATE\n");
|
||||
//getchar();
|
||||
|
||||
|
||||
#if defined(ENABLE_ITTI)
|
||||
printf("Entering ITTI signals handler\n");
|
||||
itti_wait_tasks_end();
|
||||
@@ -1221,9 +1167,9 @@ int main( int argc, char **argv )
|
||||
printf("oai_exit=%d\n",oai_exit);
|
||||
#else
|
||||
|
||||
while (oai_exit==0)
|
||||
rt_sleep_ns(100000000ULL);
|
||||
printf("Terminating application - oai_exit=%d\n",oai_exit);
|
||||
while (oai_exit==0)
|
||||
rt_sleep_ns(100000000ULL);
|
||||
printf("Terminating application - oai_exit=%d\n",oai_exit);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1246,7 +1192,7 @@ int main( int argc, char **argv )
|
||||
pthread_cond_destroy(&sync_cond);
|
||||
pthread_mutex_destroy(&sync_mutex);
|
||||
|
||||
pthread_mutex_destroy(&ue_pf_po_mutex);
|
||||
// pthread_mutex_destroy(&ue_pf_po_mutex);
|
||||
|
||||
// *** Handle per CC_id openair0
|
||||
if (PHY_vars_UE_g[0][0]->rfdevice.trx_end_func)
|
||||
|
||||
@@ -0,0 +1,541 @@
|
||||
/*
|
||||
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The OpenAirInterface Software Alliance licenses this file to You under
|
||||
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
|
||||
* except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.openairinterface.org/?page_id=698
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*-------------------------------------------------------------------------------
|
||||
* For more information about the OpenAirInterface (OAI) Software Alliance:
|
||||
* contact@openairinterface.org
|
||||
*/
|
||||
|
||||
/*! \file rfsim.c
|
||||
* \brief function for simulated RF device
|
||||
* \author R. Knopp
|
||||
* \date 2018
|
||||
* \version 1.0
|
||||
* \company Eurecom
|
||||
* \email: openair_tech@eurecom.fr
|
||||
* \note
|
||||
* \warning
|
||||
*/
|
||||
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <stdio.h>
|
||||
#include <signal.h>
|
||||
#include <execinfo.h>
|
||||
#include <time.h>
|
||||
#include <mcheck.h>
|
||||
#include <sys/timerfd.h>
|
||||
|
||||
#include "assertions.h"
|
||||
#include "rfsim.h"
|
||||
#include "openair1/SIMULATION/TOOLS/sim.h"
|
||||
#include "enb_config.h"
|
||||
#include "enb_paramdef.h"
|
||||
#include "platform_constants.h"
|
||||
#include "common/config/config_paramdesc.h"
|
||||
#include "common/config/config_userapi.h"
|
||||
#include "common/ran_context.h"
|
||||
#include "PHY/defs_UE.h"
|
||||
#include "PHY/defs_eNB.h"
|
||||
#include "vcd_signal_dumper.h"
|
||||
|
||||
RAN_CONTEXT_t RC;
|
||||
extern PHY_VARS_UE ***PHY_vars_UE_g;
|
||||
|
||||
|
||||
// put all of these in a common structure after
|
||||
sim_t sim;
|
||||
|
||||
|
||||
void init_ru_devices(void);
|
||||
void init_RU(const char*);
|
||||
void *rfsim_top(void *n_frames);
|
||||
|
||||
void wait_RUs(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
// wait for all RUs to be configured over fronthaul
|
||||
pthread_mutex_lock(&RC.ru_mutex);
|
||||
|
||||
|
||||
|
||||
while (RC.ru_mask>0) {
|
||||
pthread_cond_wait(&RC.ru_cond,&RC.ru_mutex);
|
||||
}
|
||||
|
||||
// copy frame parameters from RU to UEs
|
||||
for (i=0;i<NB_UE_INST;i++) {
|
||||
sim.current_UE_rx_timestamp[i][0] = RC.ru[0]->frame_parms.samples_per_tti + RC.ru[0]->frame_parms.ofdm_symbol_size + RC.ru[0]->frame_parms.nb_prefix_samples0;
|
||||
|
||||
}
|
||||
|
||||
for (int ru_id=0;ru_id<RC.nb_RU;ru_id++) sim.current_ru_rx_timestamp[ru_id][0] = RC.ru[ru_id]->frame_parms.samples_per_tti;
|
||||
|
||||
printf("RUs are ready, let's go\n");
|
||||
}
|
||||
|
||||
void wait_eNBs(void)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
void RCConfig_sim(void) {
|
||||
|
||||
paramlist_def_t RUParamList = {CONFIG_STRING_RU_LIST,NULL,0};
|
||||
|
||||
// AssertFatal(RC.config_file_name!=NULL,"configuration file is undefined\n");
|
||||
|
||||
// Get num RU instances
|
||||
config_getlist( &RUParamList,NULL,0, NULL);
|
||||
RC.nb_RU = RUParamList.numelt;
|
||||
|
||||
printf("returned with %d rus\n",RC.nb_RU);
|
||||
|
||||
init_RU(NULL);
|
||||
|
||||
printf("Waiting for RUs to get set up\n");
|
||||
wait_RUs();
|
||||
|
||||
init_ru_devices();
|
||||
|
||||
static int nframes = 100000;
|
||||
|
||||
AssertFatal(0 == pthread_create(&sim.rfsim_thread,
|
||||
NULL,
|
||||
rfsim_top,
|
||||
(void*)&nframes), "");
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
int ru_trx_start(openair0_device *device) {
|
||||
return(0);
|
||||
}
|
||||
|
||||
void ru_trx_end(openair0_device *device) {
|
||||
return;
|
||||
}
|
||||
|
||||
int ru_trx_stop(openair0_device *device) {
|
||||
return(0);
|
||||
}
|
||||
int UE_trx_start(openair0_device *device) {
|
||||
return(0);
|
||||
}
|
||||
void UE_trx_end(openair0_device *device) {
|
||||
return;
|
||||
}
|
||||
int UE_trx_stop(openair0_device *device) {
|
||||
return(0);
|
||||
}
|
||||
int ru_trx_set_freq(openair0_device *device, openair0_config_t *openair0_cfg, int dummy) {
|
||||
return(0);
|
||||
}
|
||||
int ru_trx_set_gains(openair0_device *device, openair0_config_t *openair0_cfg) {
|
||||
return(0);
|
||||
}
|
||||
int UE_trx_set_freq(openair0_device *device, openair0_config_t *openair0_cfg, int dummy) {
|
||||
return(0);
|
||||
}
|
||||
int UE_trx_set_gains(openair0_device *device, openair0_config_t *openair0_cfg) {
|
||||
return(0);
|
||||
}
|
||||
|
||||
extern pthread_mutex_t subframe_mutex;
|
||||
extern int subframe_ru_mask,subframe_UE_mask;
|
||||
|
||||
|
||||
int ru_trx_read(openair0_device *device, openair0_timestamp *ptimestamp, void **buff, int nsamps, int cc) {
|
||||
|
||||
int ru_id = device->Mod_id;
|
||||
int CC_id = device->CC_id;
|
||||
|
||||
int subframe;
|
||||
int sample_count=0;
|
||||
|
||||
*ptimestamp = sim.last_ru_rx_timestamp[ru_id][CC_id];
|
||||
|
||||
|
||||
LOG_D(SIM,"RU_trx_read nsamps %d TS(%llu,%llu) => subframe %d\n",nsamps,
|
||||
(unsigned long long)sim.current_ru_rx_timestamp[ru_id][CC_id],
|
||||
(unsigned long long)sim.last_ru_rx_timestamp[ru_id][CC_id],
|
||||
(int)((*ptimestamp/RC.ru[ru_id]->frame_parms.samples_per_tti)%10));
|
||||
// if we're at a subframe boundary generate UL signals for this ru
|
||||
|
||||
while (sample_count<nsamps) {
|
||||
while (sim.current_ru_rx_timestamp[ru_id][CC_id]<
|
||||
(nsamps+sim.last_ru_rx_timestamp[ru_id][CC_id])) {
|
||||
LOG_D(SIM,"RU: current TS %"PRIi64", last TS %"PRIi64", sleeping\n",sim.current_ru_rx_timestamp[ru_id][CC_id],sim.last_ru_rx_timestamp[ru_id][CC_id]);
|
||||
usleep(500);
|
||||
}
|
||||
|
||||
|
||||
|
||||
subframe = (sim.last_ru_rx_timestamp[ru_id][CC_id]/RC.ru[ru_id]->frame_parms.samples_per_tti)%10;
|
||||
if (subframe_select(&RC.ru[ru_id]->frame_parms,subframe) != SF_DL || RC.ru[ru_id]->frame_parms.frame_type == FDD) {
|
||||
LOG_D(SIM,"RU_trx_read generating UL subframe %d (Ts %llu, current TS %llu)\n",
|
||||
subframe,(unsigned long long)*ptimestamp,
|
||||
(unsigned long long)sim.current_ru_rx_timestamp[ru_id][CC_id]);
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_SIM_DO_UL_SIGNAL,1);
|
||||
do_UL_sig(&sim,
|
||||
subframe,
|
||||
0, // abstraction_flag
|
||||
&RC.ru[ru_id]->frame_parms,
|
||||
0, // frame is only used for abstraction
|
||||
ru_id,
|
||||
CC_id);
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_SIM_DO_UL_SIGNAL,0);
|
||||
}
|
||||
sim.last_ru_rx_timestamp[ru_id][CC_id] += RC.ru[ru_id]->frame_parms.samples_per_tti;
|
||||
sample_count += RC.ru[ru_id]->frame_parms.samples_per_tti;
|
||||
}
|
||||
|
||||
|
||||
return(nsamps);
|
||||
}
|
||||
|
||||
int UE_trx_read(openair0_device *device, openair0_timestamp *ptimestamp, void **buff, int nsamps, int cc)
|
||||
{
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_SIM_UE_TRX_READ,1);
|
||||
int UE_id = device->Mod_id;
|
||||
int CC_id = device->CC_id;
|
||||
|
||||
int subframe;
|
||||
int sample_count=0;
|
||||
int read_size;
|
||||
int sptti = PHY_vars_UE_g[UE_id][CC_id]->frame_parms.samples_per_tti;
|
||||
|
||||
*ptimestamp = sim.last_UE_rx_timestamp[UE_id][CC_id];
|
||||
|
||||
LOG_D(PHY,"UE %d DL simulation 0: UE_trx_read nsamps %d TS %llu (%llu, offset %d) antenna %d\n",
|
||||
UE_id,
|
||||
nsamps,
|
||||
(unsigned long long)sim.current_UE_rx_timestamp[UE_id][CC_id],
|
||||
(unsigned long long)sim.last_UE_rx_timestamp[UE_id][CC_id],
|
||||
(int)(sim.last_UE_rx_timestamp[UE_id][CC_id]%sptti),
|
||||
cc);
|
||||
|
||||
|
||||
if (nsamps < sptti)
|
||||
read_size = nsamps;
|
||||
else
|
||||
read_size = sptti;
|
||||
|
||||
while (sample_count<nsamps) {
|
||||
LOG_D(SIM,"UE %d: DL simulation 1: UE_trx_read : current TS now %"PRIi64", last TS %"PRIi64"\n",UE_id,sim.current_UE_rx_timestamp[UE_id][CC_id],sim.last_UE_rx_timestamp[UE_id][CC_id]);
|
||||
while (sim.current_UE_rx_timestamp[UE_id][CC_id] <
|
||||
(sim.last_UE_rx_timestamp[UE_id][CC_id]+read_size)) {
|
||||
LOG_D(SIM,"UE %d: DL simulation 2: UE_trx_read : current TS %"PRIi64", last TS %"PRIi64", sleeping\n",UE_id,sim.current_UE_rx_timestamp[UE_id][CC_id],sim.last_UE_rx_timestamp[UE_id][CC_id]);
|
||||
usleep(500);
|
||||
}
|
||||
LOG_D(SIM,"UE %d: DL simulation 3: UE_trx_read : current TS now %"PRIi64", last TS %"PRIi64"\n",UE_id,sim.current_UE_rx_timestamp[UE_id][CC_id],sim.last_UE_rx_timestamp[UE_id][CC_id]);
|
||||
|
||||
// if we cross a subframe-boundary
|
||||
subframe = (sim.last_UE_rx_timestamp[UE_id][CC_id]/sptti)%10;
|
||||
|
||||
// tell top-level we are busy
|
||||
pthread_mutex_lock(&sim.subframe_mutex);
|
||||
sim.subframe_UE_mask|=(1<<UE_id);
|
||||
LOG_D(SIM,"Setting UE_id %d mask to busy (%d)\n",UE_id,sim.subframe_UE_mask);
|
||||
pthread_mutex_unlock(&sim.subframe_mutex);
|
||||
|
||||
|
||||
|
||||
LOG_D(PHY,"UE %d: DL simulation 4: UE_trx_read generating DL subframe %d (Ts %llu, current TS %llu,nsamps %d)\n",
|
||||
UE_id,subframe,(unsigned long long)*ptimestamp,
|
||||
(unsigned long long)sim.current_UE_rx_timestamp[UE_id][CC_id],
|
||||
nsamps);
|
||||
|
||||
LOG_D(SIM,"UE %d: DL simulation 5: Doing DL simulation for %d samples starting in subframe %d at offset %d\n",
|
||||
UE_id,nsamps,subframe,
|
||||
(int)(sim.last_UE_rx_timestamp[UE_id][CC_id]%sptti));
|
||||
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_SIM_DO_DL_SIGNAL,1);
|
||||
do_DL_sig(&sim,
|
||||
subframe,
|
||||
sim.last_UE_rx_timestamp[UE_id][CC_id]%sptti,
|
||||
sptti,
|
||||
0, //abstraction_flag,
|
||||
&PHY_vars_UE_g[UE_id][CC_id]->frame_parms,
|
||||
UE_id,
|
||||
CC_id);
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_SIM_DO_DL_SIGNAL,0);
|
||||
LOG_D(PHY,"UE %d: DL simulation 6: UE_trx_read @ TS %"PRIi64" (%"PRIi64")=> frame %d, subframe %d\n",
|
||||
UE_id, sim.current_UE_rx_timestamp[UE_id][CC_id],
|
||||
sim.last_UE_rx_timestamp[UE_id][CC_id],
|
||||
(int)((sim.last_UE_rx_timestamp[UE_id][CC_id]/(sptti*10))&1023),
|
||||
subframe);
|
||||
|
||||
sim.last_UE_rx_timestamp[UE_id][CC_id] += read_size;
|
||||
sample_count += read_size;
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_SIM_UE_TRX_READ,0);
|
||||
return(nsamps);
|
||||
}
|
||||
|
||||
|
||||
int ru_trx_write(openair0_device *device,openair0_timestamp timestamp, void **buff, int nsamps, int cc, int flags) {
|
||||
|
||||
int ru_id = device->Mod_id;
|
||||
|
||||
LTE_DL_FRAME_PARMS *frame_parms = &RC.ru[ru_id]->frame_parms;
|
||||
|
||||
pthread_mutex_lock(&sim.subframe_mutex);
|
||||
LOG_D(SIM,"[TXPATH] ru_trx_write: RU %d mask %d\n",ru_id,sim.subframe_ru_mask);
|
||||
pthread_mutex_unlock(&sim.subframe_mutex);
|
||||
|
||||
// compute amplitude of TX signal from first symbol in subframe
|
||||
// note: assumes that the packet is an entire subframe
|
||||
|
||||
sim.ru_amp[ru_id] = 0;
|
||||
for (int aa=0; aa<RC.ru[ru_id]->nb_tx; aa++) {
|
||||
sim.ru_amp[ru_id] += (double)signal_energy((int32_t*)buff[aa],frame_parms->ofdm_symbol_size)/(12*frame_parms->N_RB_DL);
|
||||
}
|
||||
sim.ru_amp[ru_id] = sqrt(sim.ru_amp[ru_id]);
|
||||
|
||||
LOG_D(PHY,"Setting amp for RU %d to %f (%d)\n",ru_id,sim.ru_amp[ru_id], dB_fixed((double)signal_energy((int32_t*)buff[0],frame_parms->ofdm_symbol_size)));
|
||||
// tell top-level we are done
|
||||
pthread_mutex_lock(&sim.subframe_mutex);
|
||||
sim.subframe_ru_mask|=(1<<ru_id);
|
||||
LOG_D(SIM,"Setting RU %d to busy\n",ru_id);
|
||||
pthread_mutex_unlock(&sim.subframe_mutex);
|
||||
|
||||
return(nsamps);
|
||||
}
|
||||
|
||||
int UE_trx_write(openair0_device *device,openair0_timestamp timestamp, void **buff, int nsamps, int cc, int flags) {
|
||||
|
||||
return(nsamps);
|
||||
}
|
||||
|
||||
void init_ru_devices(){
|
||||
|
||||
|
||||
module_id_t ru_id;
|
||||
RU_t *ru;
|
||||
|
||||
// allocate memory for RU if not already done
|
||||
if (RC.ru==NULL) RC.ru = (RU_t**)malloc(RC.nb_RU*sizeof(RU_t*));
|
||||
|
||||
for (ru_id=0;ru_id<RC.nb_RU;ru_id++) {
|
||||
LOG_D(SIM,"Initiaizing rfdevice for RU %d\n",ru_id);
|
||||
if (RC.ru[ru_id]==NULL) RC.ru[ru_id] = (RU_t*)malloc(sizeof(RU_t));
|
||||
ru = RC.ru[ru_id];
|
||||
ru->rfdevice.Mod_id = ru_id;
|
||||
ru->rfdevice.CC_id = 0;
|
||||
ru->rfdevice.trx_start_func = ru_trx_start;
|
||||
ru->rfdevice.trx_read_func = ru_trx_read;
|
||||
ru->rfdevice.trx_write_func = ru_trx_write;
|
||||
ru->rfdevice.trx_end_func = ru_trx_end;
|
||||
ru->rfdevice.trx_stop_func = ru_trx_stop;
|
||||
ru->rfdevice.trx_set_freq_func = ru_trx_set_freq;
|
||||
ru->rfdevice.trx_set_gains_func = ru_trx_set_gains;
|
||||
sim.last_ru_rx_timestamp[ru_id][0] = 0;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
void init_ue_devices(PHY_VARS_UE *UE) {
|
||||
|
||||
AssertFatal(UE!=NULL,"UE context is not allocated\n");
|
||||
printf("Initializing UE %d.%d\n",UE->Mod_id,UE->CC_id);
|
||||
UE->rfdevice.Mod_id = UE->Mod_id;
|
||||
UE->rfdevice.CC_id = UE->CC_id;
|
||||
UE->rfdevice.trx_start_func = UE_trx_start;
|
||||
UE->rfdevice.trx_read_func = UE_trx_read;
|
||||
UE->rfdevice.trx_write_func = UE_trx_write;
|
||||
UE->rfdevice.trx_end_func = UE_trx_end;
|
||||
UE->rfdevice.trx_stop_func = UE_trx_stop;
|
||||
UE->rfdevice.trx_set_freq_func = UE_trx_set_freq;
|
||||
UE->rfdevice.trx_set_gains_func = UE_trx_set_gains;
|
||||
sim.last_UE_rx_timestamp[UE->Mod_id][UE->CC_id] = 0;
|
||||
}
|
||||
|
||||
void init_ocm(double snr_dB,double sinr_dB)
|
||||
{
|
||||
module_id_t UE_id, ru_id;
|
||||
int CC_id;
|
||||
|
||||
randominit(0);
|
||||
set_taus_seed(0);
|
||||
|
||||
|
||||
init_channel_vars ();//fp, &s_re, &s_im, &r_re, &r_im, &r_re0, &r_im0);
|
||||
|
||||
// initialize channel descriptors
|
||||
LOG_I(PHY,"Initializing channel descriptors (nb_RU %d, nb_UE %d)\n",RC.nb_RU,NB_UE_INST);
|
||||
for (ru_id = 0; ru_id < RC.nb_RU; ru_id++) {
|
||||
for (UE_id = 0; UE_id < NB_UE_INST; UE_id++) {
|
||||
for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
|
||||
|
||||
LOG_I(PHY,"Initializing channel descriptors (RU %d, UE %d) for N_RB_DL %d\n",ru_id,UE_id,
|
||||
RC.ru[ru_id]->frame_parms.N_RB_DL);
|
||||
sim.RU2UE[ru_id][UE_id][CC_id] =
|
||||
new_channel_desc_scm(RC.ru[ru_id]->nb_tx,
|
||||
PHY_vars_UE_g[UE_id][CC_id]->frame_parms.nb_antennas_rx,
|
||||
AWGN,
|
||||
N_RB2sampling_rate(RC.ru[ru_id]->frame_parms.N_RB_DL),
|
||||
N_RB2channel_bandwidth(RC.ru[ru_id]->frame_parms.N_RB_DL),
|
||||
0.0,
|
||||
0,
|
||||
0);
|
||||
random_channel(sim.RU2UE[ru_id][UE_id][CC_id],0);
|
||||
LOG_D(OCM,"[SIM] Initializing channel (%s) from UE %d to ru %d\n", "AWGN",UE_id, ru_id);
|
||||
|
||||
|
||||
sim.UE2RU[UE_id][ru_id][CC_id] =
|
||||
new_channel_desc_scm(PHY_vars_UE_g[UE_id][CC_id]->frame_parms.nb_antennas_tx,
|
||||
RC.ru[ru_id]->nb_rx,
|
||||
AWGN,
|
||||
N_RB2sampling_rate(RC.ru[ru_id]->frame_parms.N_RB_UL),
|
||||
N_RB2channel_bandwidth(RC.ru[ru_id]->frame_parms.N_RB_UL),
|
||||
0.0,
|
||||
0,
|
||||
0);
|
||||
|
||||
random_channel(sim.UE2RU[UE_id][ru_id][CC_id],0);
|
||||
|
||||
// to make channel reciprocal uncomment following line instead of previous. However this only works for SISO at the moment. For MIMO the channel would need to be transposed.
|
||||
//UE2RU[UE_id][ru_id] = RU2UE[ru_id][UE_id];
|
||||
|
||||
AssertFatal(sim.RU2UE[ru_id][UE_id][CC_id]!=NULL,"RU2UE[%d][%d][%d] is null\n",ru_id,UE_id,CC_id);
|
||||
AssertFatal(sim.UE2RU[UE_id][ru_id][CC_id]!=NULL,"UE2RU[%d][%d][%d] is null\n",UE_id,ru_id,CC_id);
|
||||
//pathloss: -132.24 dBm/15kHz RE + target SNR - eNB TX power per RE
|
||||
if (ru_id == (UE_id % RC.nb_RU)) {
|
||||
sim.RU2UE[ru_id][UE_id][CC_id]->path_loss_dB = -132.24 + snr_dB - RC.ru[ru_id]->frame_parms.pdsch_config_common.referenceSignalPower;
|
||||
sim.UE2RU[UE_id][ru_id][CC_id]->path_loss_dB = -132.24 + snr_dB - RC.ru[ru_id]->frame_parms.pdsch_config_common.referenceSignalPower;
|
||||
} else {
|
||||
sim.RU2UE[ru_id][UE_id][CC_id]->path_loss_dB = -132.24 + sinr_dB - RC.ru[ru_id]->frame_parms.pdsch_config_common.referenceSignalPower;
|
||||
sim.UE2RU[UE_id][ru_id][CC_id]->path_loss_dB = -132.24 + sinr_dB - RC.ru[ru_id]->frame_parms.pdsch_config_common.referenceSignalPower;
|
||||
}
|
||||
|
||||
LOG_I(OCM,"Path loss from eNB %d to UE %d (CCid %d)=> %f dB (eNB TX %d, SNR %f)\n",ru_id,UE_id,CC_id,
|
||||
sim.RU2UE[ru_id][UE_id][CC_id]->path_loss_dB,
|
||||
RC.ru[ru_id]->frame_parms.pdsch_config_common.referenceSignalPower,snr_dB);
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void update_ocm(double snr_dB,double sinr_dB)
|
||||
{
|
||||
module_id_t UE_id, ru_id;
|
||||
int CC_id;
|
||||
|
||||
|
||||
for (ru_id = 0; ru_id < RC.nb_RU; ru_id++) {
|
||||
for (UE_id = 0; UE_id < NB_UE_INST; UE_id++) {
|
||||
for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
|
||||
|
||||
AssertFatal(sim.RU2UE[ru_id][UE_id][CC_id]!=NULL,"RU2UE[%d][%d][%d] is null\n",ru_id,UE_id,CC_id);
|
||||
AssertFatal(sim.UE2RU[UE_id][ru_id][CC_id]!=NULL,"UE2RU[%d][%d][%d] is null\n",UE_id,ru_id,CC_id);
|
||||
//pathloss: -132.24 dBm/15kHz RE + target SNR - eNB TX power per RE
|
||||
if (ru_id == (UE_id % RC.nb_RU)) {
|
||||
sim.RU2UE[ru_id][UE_id][CC_id]->path_loss_dB = -132.24 + snr_dB - RC.ru[ru_id]->frame_parms.pdsch_config_common.referenceSignalPower;
|
||||
sim.UE2RU[UE_id][ru_id][CC_id]->path_loss_dB = -132.24 + snr_dB - RC.ru[ru_id]->frame_parms.pdsch_config_common.referenceSignalPower;
|
||||
} else {
|
||||
sim.RU2UE[ru_id][UE_id][CC_id]->path_loss_dB = -132.24 + sinr_dB - RC.ru[ru_id]->frame_parms.pdsch_config_common.referenceSignalPower;
|
||||
sim.UE2RU[UE_id][ru_id][CC_id]->path_loss_dB = -132.24 + sinr_dB - RC.ru[ru_id]->frame_parms.pdsch_config_common.referenceSignalPower;
|
||||
}
|
||||
|
||||
LOG_D(OCM,"Path loss from eNB %d to UE %d (CCid %d)=> %f dB (eNB TX %d, SNR %f)\n",ru_id,UE_id,CC_id,
|
||||
sim.RU2UE[ru_id][UE_id][CC_id]->path_loss_dB,
|
||||
RC.ru[ru_id]->frame_parms.pdsch_config_common.referenceSignalPower,snr_dB);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void init_channel_vars(void)
|
||||
{
|
||||
|
||||
int i;
|
||||
|
||||
memset(sim.RU_output_mask,0,sizeof(int)*NUMBER_OF_UE_MAX);
|
||||
for (i=0;i<NB_UE_INST;i++)
|
||||
pthread_mutex_init(&sim.RU_output_mutex[i],NULL);
|
||||
|
||||
memset(sim.UE_output_mask,0,sizeof(int)*NUMBER_OF_RU_MAX);
|
||||
for (i=0;i<RC.nb_RU;i++)
|
||||
pthread_mutex_init(&sim.UE_output_mutex[i],NULL);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
void *rfsim_top(void *n_frames) {
|
||||
|
||||
|
||||
wait_sync("rfsim_top");
|
||||
|
||||
|
||||
printf("Running rfsim with %d frames\n",*(int*)n_frames);
|
||||
for (int frame = 0;
|
||||
frame < *(int*)n_frames;
|
||||
frame++) {
|
||||
|
||||
for (int sf = 0; sf < 10; sf++) {
|
||||
int CC_id=0;
|
||||
int all_done=0;
|
||||
while (all_done==0) {
|
||||
|
||||
pthread_mutex_lock(&sim.subframe_mutex);
|
||||
|
||||
int subframe_ru_mask_local = (subframe_select(&RC.ru[0]->frame_parms,(sf+4)%10)!=SF_UL) ? sim.subframe_ru_mask : ((1<<RC.nb_RU)-1);
|
||||
int subframe_UE_mask_local = (RC.ru[0]->frame_parms.frame_type == FDD || subframe_select(&RC.ru[0]->frame_parms,(sf+4)%10)!=SF_DL) ? sim.subframe_UE_mask : ((1<<NB_UE_INST)-1);
|
||||
pthread_mutex_unlock(&sim.subframe_mutex);
|
||||
LOG_D(SIM,"Frame %d, Subframe %d, NB_RU %d, NB_UE %d: Checking masks %x,%x\n",frame,sf,RC.nb_RU,NB_UE_INST,subframe_ru_mask_local,subframe_UE_mask_local);
|
||||
if ((subframe_ru_mask_local == ((1<<RC.nb_RU)-1)) &&
|
||||
(subframe_UE_mask_local == ((1<<NB_UE_INST)-1))) all_done=1;
|
||||
else usleep(1500);
|
||||
}
|
||||
|
||||
|
||||
//clear subframe masks for next round
|
||||
pthread_mutex_lock(&sim.subframe_mutex);
|
||||
sim.subframe_ru_mask=0;
|
||||
sim.subframe_UE_mask=0;
|
||||
pthread_mutex_unlock(&sim.subframe_mutex);
|
||||
|
||||
// increment timestamps
|
||||
for (int ru_id=0;ru_id<RC.nb_RU;ru_id++) {
|
||||
sim.current_ru_rx_timestamp[ru_id][CC_id] += RC.ru[ru_id]->frame_parms.samples_per_tti;
|
||||
LOG_D(SIM,"RU %d/%d: TS %"PRIi64"\n",ru_id,CC_id,sim.current_ru_rx_timestamp[ru_id][CC_id]);
|
||||
}
|
||||
for (int UE_inst = 0; UE_inst<NB_UE_INST;UE_inst++) {
|
||||
sim.current_UE_rx_timestamp[UE_inst][CC_id] += PHY_vars_UE_g[UE_inst][CC_id]->frame_parms.samples_per_tti;
|
||||
LOG_D(SIM,"UE %d/%d: TS %"PRIi64"\n",UE_inst,CC_id,sim.current_UE_rx_timestamp[UE_inst][CC_id]);
|
||||
}
|
||||
if (oai_exit == 1) return((void*)NULL);
|
||||
}
|
||||
}
|
||||
|
||||
return((void*)NULL);
|
||||
}
|
||||
@@ -18,14 +18,19 @@
|
||||
* For more information about the OpenAirInterface (OAI) Software Alliance:
|
||||
* contact@openairinterface.org
|
||||
*/
|
||||
#ifndef __RFSIM__H__
|
||||
#define __RFSIM__H__
|
||||
#include "lte-softmodem.h"
|
||||
#include "openair1/SIMULATION/TOOLS/sim.h"
|
||||
#include "platform_constants.h"
|
||||
#include "common/ran_context.h"
|
||||
#include "PHY/defs_UE.h"
|
||||
#include "PHY/defs_eNB.h"
|
||||
|
||||
#include<stdio.h>
|
||||
#include<math.h>
|
||||
#include<cblas.h>
|
||||
//#include<atlas_lapack.h>
|
||||
#include<clapack.h>
|
||||
#include<oaisim.h>
|
||||
void init_ocm(double snr_dB,double sinr_dB);
|
||||
|
||||
double **init_SF (int map_length, int map_height, double decor_dist, double variance); //,double decor,double var);
|
||||
double **createMat (int nbRow, int nbCol);
|
||||
void destroyMat(double **mat1,int row,int col);
|
||||
void update_ocm(double snr_dB,double sinr_dB);
|
||||
|
||||
void init_channel_vars(void);
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,42 @@
|
||||
[*]
|
||||
[*] GTKWave Analyzer v3.3.58 (w)1999-2014 BSI
|
||||
[*] Tue Jun 5 12:44:02 2018
|
||||
[*]
|
||||
[dumpfile] "/tmp/openair_dump_UE.vcd"
|
||||
[dumpfile_mtime] "Tue Jun 5 12:38:07 2018"
|
||||
[dumpfile_size] 21826387
|
||||
[savefile] "/home/knopp/oai/openairinterface5g/targets/RT/USER/rru_if4p5_simulator.gtkw"
|
||||
[timestart] 6591570000
|
||||
[size] 1301 716
|
||||
[pos] 309 0
|
||||
*-22.793451 29983948856 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
|
||||
[sst_width] 312
|
||||
[signals_width] 262
|
||||
[sst_expanded] 1
|
||||
[sst_vpaned_height] 294
|
||||
@29
|
||||
functions.UE_trx_read
|
||||
@28
|
||||
functions.trx_read
|
||||
functions.trx_write
|
||||
@24
|
||||
variables.trx_write_flags[63:0]
|
||||
@28
|
||||
functions.trx_write_if
|
||||
functions.send_if4
|
||||
functions.trx_read_if
|
||||
functions.recv_if4
|
||||
@24
|
||||
variables.trx_ts[63:0]
|
||||
variables.trx_tst[63:0]
|
||||
variables.frame_number_RX0_RU[63:0]
|
||||
variables.subframe_number_RX0_RU[63:0]
|
||||
variables.frame_number_TX0_RU[63:0]
|
||||
variables.subframe_number_TX0_RU[63:0]
|
||||
@28
|
||||
functions.do_DL_sig
|
||||
functions.do_UL_sig
|
||||
functions.phy_procedures_ru_feprx0
|
||||
functions.phy_procedures_ru_feptx_ofdm0
|
||||
[pattern_trace] 1
|
||||
[pattern_trace] 0
|
||||
@@ -1,23 +1,23 @@
|
||||
[*]
|
||||
[*] GTKWave Analyzer v3.3.58 (w)1999-2014 BSI
|
||||
[*] Sun Jan 15 07:26:50 2017
|
||||
[*] Tue Jun 5 09:36:17 2018
|
||||
[*]
|
||||
[dumpfile] "/tmp/openair_dump_eNB.vcd"
|
||||
[dumpfile_mtime] "Sun Jan 15 07:04:19 2017"
|
||||
[dumpfile_size] 18140627
|
||||
[savefile] "/home/uprru1/oai/openairinterface5g/targets/RT/USER/rru_if4p5_usrp.gtkw"
|
||||
[timestart] 29977510000
|
||||
[dumpfile] "/tmp/openair_dump_UE.vcd"
|
||||
[dumpfile_mtime] "Tue Jun 5 09:22:52 2018"
|
||||
[dumpfile_size] 23057775
|
||||
[savefile] "/home/knopp/oai/openairinterface5g/targets/RT/USER/rru_if4p5_usrp.gtkw"
|
||||
[timestart] 25050480000
|
||||
[size] 1301 716
|
||||
[pos] 309 0
|
||||
*-21.793451 29983948856 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
|
||||
[sst_width] 284
|
||||
[sst_width] 312
|
||||
[signals_width] 262
|
||||
[sst_expanded] 1
|
||||
[sst_vpaned_height] 294
|
||||
@28
|
||||
functions.trx_read
|
||||
functions.trx_write
|
||||
@25
|
||||
@24
|
||||
variables.trx_write_flags[63:0]
|
||||
@28
|
||||
functions.trx_write_if
|
||||
@@ -27,23 +27,10 @@ functions.recv_if4
|
||||
@24
|
||||
variables.trx_ts[63:0]
|
||||
variables.trx_tst[63:0]
|
||||
@28
|
||||
functions.eNB_thread_rxtx0
|
||||
@24
|
||||
variables.frame_number_RX0_eNB[63:0]
|
||||
variables.subframe_number_RX0_eNB[63:0]
|
||||
variables.frame_number_TX0_eNB[63:0]
|
||||
variables.subframe_number_TX0_eNB[63:0]
|
||||
@28
|
||||
functions.eNB_thread_rxtx1
|
||||
@24
|
||||
variables.frame_number_RX1_eNB[63:0]
|
||||
variables.subframe_number_RX1_eNB[63:0]
|
||||
variables.frame_number_TX1_eNB[63:0]
|
||||
variables.subframe_number_TX1_eNB[63:0]
|
||||
@28
|
||||
functions.phy_eNB_ofdm_mod_l
|
||||
functions.phy_eNB_slot_fep
|
||||
functions.phy_enb_prach_rx
|
||||
variables.frame_number_RX0_RU[63:0]
|
||||
variables.subframe_number_RX0_RU[63:0]
|
||||
variables.frame_number_TX0_RU[63:0]
|
||||
@25
|
||||
variables.subframe_number_TX0_RU[63:0]
|
||||
[pattern_trace] 1
|
||||
[pattern_trace] 0
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
all: oaisim nasmesh
|
||||
|
||||
oaisim:
|
||||
(cd $(OPENAIR_TARGETS)/SIMU/USER && make LINK_ENB_PDCP_TO_IP_DRIVER=1 -j2 )
|
||||
nasmesh:
|
||||
(cd $(OPENAIR2_DIR) && make nasmesh_netlink.ko)
|
||||
(cd $(OPENAIR2_DIR)/NAS/DRIVER/MESH/RB_TOOL/ && make)
|
||||
|
||||
one_eNB_one_UE: oaisim nasmesh
|
||||
|
||||
userclean: clean oaisim nasmesh
|
||||
|
||||
clean:
|
||||
(cd $(OPENAIR_TARGETS)/SIMU/USER && make cleanall)
|
||||
@@ -1,71 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
sudo kill -9 `ps -ef | grep oaisim | awk '{print $2}'`
|
||||
sudo pkill oaisim
|
||||
|
||||
# set params
|
||||
EMULATION_DEV_INTERFACE="eth0"
|
||||
EMULATION_MULTICAST_GROUP=1
|
||||
EMULATION_LOG_LEVEL=7 # 3 = error, 5 info, 7 debug, trace= 9
|
||||
#OAI_LOCAL_ADDRESS="10.0.1.1"
|
||||
#OAI_REMOTE_ADDRESS="10.0.1.2"
|
||||
#EMULATION_DEV_ADDRESS= `hostname -I cut -f1 -d' '`
|
||||
EMULATION_DEV_ADDRESS=`LC_ALL=C ifconfig $EMULATION_DEV_INTERFACE | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1}'`
|
||||
|
||||
echo "Setting Emulation Interface to $EMULATION_DEV_INTERFACE ($EMULATION_DEV_ADDRESS)"
|
||||
|
||||
#funcs
|
||||
test_install_package() {
|
||||
# usage: test_install_package package_name
|
||||
if [ $# -eq 1 ]; then
|
||||
dpkg -s "$1" > /dev/null 2>&1 && {
|
||||
echo "$1 is installed."
|
||||
} || {
|
||||
echo "$1 is not installed."
|
||||
sudo apt-get install --assume-yes $1
|
||||
}
|
||||
fi
|
||||
}
|
||||
|
||||
#PGM provide a reliable mutlicast data transport"
|
||||
test_install_package libpgm-dev
|
||||
test_install_package libpgm-5.1-0
|
||||
|
||||
PGM_FOUND=`dpkg-query -W -f='${Status}' libpgm-dev 2>/dev/null | grep -c "ok installed" `
|
||||
|
||||
if [ $PGM_FOUND = 1 ]; then
|
||||
PGM=-D$EMULATION_DEV_ADDRESS
|
||||
else
|
||||
PGM=" "
|
||||
fi
|
||||
|
||||
# check the compilation
|
||||
echo "Bringup eNB interface"
|
||||
sudo rmmod nasmesh
|
||||
make all
|
||||
sudo insmod $OPENAIR2_DIR/NAS/DRIVER/MESH/nasmesh.ko
|
||||
|
||||
#avoid conflict with reserved multicast addresses (224.0.0.11,224.0.0.13, 224.0.0.16)
|
||||
#sudo route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0
|
||||
echo "Make sure that eth0 is the interface between the machines, otherwise change"
|
||||
sudo ip route add 239.0.0.160/28 dev $EMULATION_DEV_INTERFACE
|
||||
|
||||
# when running as a suduoers, the following lines are not needed
|
||||
#sudo ifconfig oai0 $OAI_LOCAL_ADDRESS netmask 255.255.255.0 broadcast 10.0.1.255
|
||||
#echo "applying DRB classification"
|
||||
#echo "$OPENAIR2_DIR/NAS/DRIVER/MESH/RB_TOOL/rb_tool -a -c0 -i0 -z0 -s $OAI_LOCAL_ADDRESS -t $OAI_REMOTE_ADDRESS -r 1"
|
||||
#$OPENAIR2_DIR/NAS/DRIVER/MESH/RB_TOOL/rb_tool -a -c0 -i0 -z0 -s $OAI_LOCAL_ADDRESS -t $OAI_REMOTE_ADDRESS -r 1
|
||||
|
||||
if [ -z $1 ]; then
|
||||
echo "$OPENAIR_TARGETS/SIMU/USER/oaisim -u0 -M0 -p2 -g$EMULATION_MULTICAST_GROUP -l$EMULATION_LOG_LEVEL $PGM > /dev/null"
|
||||
sudo -E $OPENAIR_TARGETS/SIMU/USER/oaisim -u0 -M0 -p2 -g$EMULATION_MULTICAST_GROUP -l$EMULATION_LOG_LEVEL $PGM > /dev/null
|
||||
else
|
||||
if [ $1 = "all" ]; then
|
||||
echo "$OPENAIR_TARGETS/SIMU/USER/oaisim -u0 -M0 -p2 -g$EMULATION_MULTICAST_GROUP -l$EMULATION_LOG_LEVEL $PGM"
|
||||
sudo -E $OPENAIR_TARGETS/SIMU/USER/oaisim -u0 -M0 -p2 -g$EMULATION_MULTICAST_GROUP -l$EMULATION_LOG_LEVEL $PGM
|
||||
else
|
||||
echo "$OPENAIR_TARGETS/SIMU/USER/oaisim -u0 -M0 -p2 -g$EMULATION_MULTICAST_GROUP -l$EMULATION_LOG_LEVEL $PGM | grep -i $1"
|
||||
sudo -E $OPENAIR_TARGETS/SIMU/USER/oaisim -u0 -M0 -p2 -g$EMULATION_MULTICAST_GROUP -l$EMULATION_LOG_LEVEL $PGM | grep -i $1
|
||||
fi
|
||||
fi
|
||||
echo "End"
|
||||
@@ -1,67 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
sudo kill -9 `ps -ef | grep oaisim | awk '{print $2}'`
|
||||
sudo pkill oaisim
|
||||
|
||||
# set params
|
||||
EMULATION_DEV_INTERFACE="eth0"
|
||||
EMULATION_MULTICAST_GROUP=1
|
||||
EMULATION_LOG_LEVEL=7 # 3 = error, 5 info, 7 debug, trace= 9
|
||||
#OAI_LOCAL_ADDRESS="10.0.1.2"
|
||||
#OAI_REMOTE_ADDRESS="10.0.1.1"
|
||||
#EMULATION_DEV_ADDRESS= `hostname -I cut -f1 -d' '`
|
||||
EMULATION_DEV_ADDRESS=`LC_ALL=C ifconfig $EMULATION_DEV_INTERFACE | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1}'`
|
||||
|
||||
echo "Setting Emulation Interface to $EMULATION_DEV_INTERFACE ($EMULATION_DEV_ADDRESS)"
|
||||
|
||||
#funcs
|
||||
test_install_package() {
|
||||
# usage: test_install_package package_name
|
||||
if [ $# -eq 1 ]; then
|
||||
dpkg -s "$1" > /dev/null 2>&1 && {
|
||||
echo "$1 is installed."
|
||||
} || {
|
||||
echo "$1 is not installed."
|
||||
sudo apt-get install --assume-yes $1
|
||||
}
|
||||
fi
|
||||
}
|
||||
#PGM provide a reliable mutlicast data transport"
|
||||
test_install_package libpgm-dev
|
||||
test_install_package libpgm-5.1-0
|
||||
PGM_FOUND=`dpkg-query -W -f='${Status}' libpgm-dev 2>/dev/null | grep -c "ok installed" `
|
||||
if [ $PGM_FOUND = 1 ]; then
|
||||
PGM=-D$EMULATION_DEV_ADDRESS
|
||||
else
|
||||
PGM=" "
|
||||
fi
|
||||
|
||||
echo "Building"
|
||||
sudo rmmod nasmesh
|
||||
make nasmesh all
|
||||
sudo insmod $OPENAIR2_DIR/NAS/DRIVER/MESH/nasmesh.ko
|
||||
|
||||
|
||||
#avoid conflict with reserved multicast addresses (224.0.0.11,224.0.0.13, 224.0.0.16)
|
||||
#sudo route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0
|
||||
echo "Make sure that eth0 is the interface between the machines, otherwise change"
|
||||
sudo ip route add 239.0.0.160/28 dev $EMULATION_DEV_INTERFACE
|
||||
|
||||
# when running as a suduoers, the following lines are not needed
|
||||
#sudo ifconfig oai0 $OAI_LOCAL_ADDRES netmask 255.255.255.0 broadcast 10.0.1.255
|
||||
#$OPENAIR2_DIR/NAS/DRIVER/MESH/RB_TOOL/rb_tool -a -c0 -i0 -z0 -s $OAI_LOCAL_ADDRESS -t $OAI_REMOTE_ADDRESS -r 1
|
||||
|
||||
# running oaisim
|
||||
if [ -z $1 ]; then
|
||||
echo "$OPENAIR_TARGETS/SIMU/USER/oaisim -b0 -M1 -p2 -g$EMULATION_MULTICAST_GROUP -l$EMULATION_LOG_LEVEL $PGM > /dev/null"
|
||||
sudo -E $OPENAIR_TARGETS/SIMU/USER/oaisim -b0 -M1 -p2 -g$EMULATION_MULTICAST_GROUP -l$EMULATION_LOG_LEVEL $PGM > /dev/null
|
||||
else
|
||||
if [ $1 = "all" ]; then
|
||||
echo "$OPENAIR_TARGETS/SIMU/USER/oaisim -b0 -M1 -p2 -g$EMULATION_MULTICAST_GROUP -l$EMULATION_LOG_LEVEL $PGM "
|
||||
sudo -E $OPENAIR_TARGETS/SIMU/USER/oaisim -b0 -M1 -p2 -g$EMULATION_MULTICAST_GROUP -l$EMULATION_LOG_LEVEL $PGM
|
||||
else
|
||||
echo "$OPENAIR_TARGETS/SIMU/USER/oaisim -b0 -M1 -p2 -g$EMULATION_MULTICAST_GROUP -l$EMULATION_LOG_LEVEL $PGM | grep -i $1"
|
||||
sudo -E $OPENAIR_TARGETS/SIMU/USER/oaisim -b0 -M1 -p2 -g$EMULATION_MULTICAST_GROUP -l$EMULATION_LOG_LEVEL $PGM | grep -i $1
|
||||
fi
|
||||
fi
|
||||
echo "End"
|
||||
@@ -1,209 +0,0 @@
|
||||
#!/usr/bin/python
|
||||
|
||||
import os, sys, warnings
|
||||
import serial
|
||||
|
||||
def sendToTTY(lineP):
|
||||
sys.stdout.write("\nSend:\n" + lineP+"\n")
|
||||
g_ser.write(lineP)
|
||||
g_ser.flush()
|
||||
|
||||
|
||||
|
||||
g_ser = serial.Serial('/dev/ttyUSB0', 9600, timeout=1)
|
||||
|
||||
buffer = ''
|
||||
while True:
|
||||
buffer += g_ser.read(1)
|
||||
#sys.stdout.write("buffer is now:\n" + buffer+"\n")
|
||||
buffer = buffer.lstrip('\r')
|
||||
if '\r' in buffer:
|
||||
at_received, buffer = buffer.split('\r')[-2:]
|
||||
|
||||
at_received = at_received.strip('\n')
|
||||
at_received = at_received.strip('\r')
|
||||
|
||||
if at_received == '\n' or at_received == '' or at_received == '\r':
|
||||
break
|
||||
else:
|
||||
sys.stdout.write("Receive stripped:\n" + at_received+"\n")
|
||||
# Q0 = enable codes
|
||||
# Q1 = disable codes
|
||||
if at_received == 'ATE0Q0V1':
|
||||
sendToTTY('\rOK\r')
|
||||
|
||||
# ATS0, Automatic Answer
|
||||
# This S-parameter controls the automatic answering feature of the modem
|
||||
# 0 automatic answering is disabled
|
||||
# 1 - 255 enable automatic answering on the ring number specified
|
||||
# here value received is 0
|
||||
elif at_received.startswith('ATS0='):
|
||||
sendToTTY('\rOK\r')
|
||||
|
||||
# AT+CMEEReport mobile equipment error
|
||||
#0 Disable +CME ERROR result code. Use ERROR instead.
|
||||
#1 Enable +CME ERROR result code and use numeric<err> values
|
||||
#2 Enable +CME ERROR result code and use verbose<err> values
|
||||
# here value received is 1
|
||||
elif at_received.startswith('AT+CMEE='):
|
||||
sendToTTY('\rOK\r')
|
||||
|
||||
# Network registration events
|
||||
# AT+CREGNetwork registration (ver. 2)
|
||||
# Description:
|
||||
# Controls the presentation of an unsolicited result code +CREG : <stat>
|
||||
# when <n>=1 and there is a change in the ME network registration status or
|
||||
# code +CREG: <stat>[,<lac>,<ci>] when <n>=2 and there is a change of thenetwork cell.
|
||||
# Read command returns the status of result code presentation and an integer <stat>,
|
||||
# which shows whether the network has currently indicated the registration of the ME.
|
||||
# Location information elements <lac> and <ci> are returned only when <n>=2 and ME
|
||||
# is registered in the network.
|
||||
# <n>:
|
||||
# 0 Disable network registration unsolicited result code. Default value
|
||||
# 1 Enable network registration unsolicited result code,+CREG: <stat>
|
||||
# 2 Enable network registration and location information unsolicited result code, +CREG:<stat>[,<lac>,<ci>]
|
||||
# <stat>:
|
||||
# 0 not registered new operator to registered and not searching
|
||||
# 1 registered, home network
|
||||
# 2 not registered, currently searching a new operator to register with
|
||||
# 3 registration denied
|
||||
# 4 unknown
|
||||
# 5 registered, roaming
|
||||
elif at_received == 'AT+CREG=2':
|
||||
sendToTTY('\rOK\r')
|
||||
sendToTTY('+CREG: 1,00C3,01021A02 \r')
|
||||
|
||||
elif at_received == 'AT+CREG=1':
|
||||
sendToTTY('\rOK\r')
|
||||
sendToTTY('+CREG: 1\r')
|
||||
|
||||
elif at_received == 'AT+CREG?':
|
||||
sendToTTY('+CREG: 1,00C3,01021A02\r\nOK\r')
|
||||
|
||||
|
||||
|
||||
# GPRS registration events
|
||||
# +CGREGNetwork registration reporting
|
||||
# Packet domain network registration status AT+CGPADDRShow PDP address
|
||||
# Description:
|
||||
# Controls the presentation of the unsolicited result code +CGREG: <stat>
|
||||
# when <n>='1' and there is a change in the ME GPRS network registration status or
|
||||
# +CGREG: <stat>[,<lac>,<ci>] when <n>='2' and there is achange of the network cell.
|
||||
# ---
|
||||
# Note: If the GPRS MT also supports circuit mode services,
|
||||
# AT+CREG and the +CREG result code apply to the registration status and location
|
||||
# information for those services. The read command returns the status of result
|
||||
# code presentation and an integer <stat> which shows whether the network has
|
||||
# currently indicated the registration of the ME.
|
||||
# Location information elements <lac> and <ci> are returned only when <n>=2
|
||||
# and ME is registered in the network.
|
||||
elif at_received == 'AT+CGREG=1':
|
||||
sendToTTY('\rOK\r')
|
||||
sendToTTY('+CGREG: 1\r')
|
||||
|
||||
elif at_received == 'AT+CGREG?':
|
||||
sendToTTY('+CGREG: 0,1\r\nOK\r')
|
||||
|
||||
|
||||
|
||||
# Call Waiting notifications
|
||||
elif at_received == 'AT+CCWA=1':
|
||||
sendToTTY('\rOK\r')
|
||||
|
||||
# Alternating voice/data off
|
||||
elif at_received == 'AT+CMOD=0':
|
||||
sendToTTY('\rOK\r')
|
||||
|
||||
# +CSSU unsolicited supp service notifications
|
||||
elif at_received == 'AT+CSSN=0,1':
|
||||
sendToTTY('\rOK\r')
|
||||
|
||||
# no connected at_received identification
|
||||
elif at_received == 'AT+COLP=0':
|
||||
sendToTTY('+COLP:0\r\nOK\r')
|
||||
|
||||
# HEX character set
|
||||
# AT+CSCSSelect TE character set (ver. 3)
|
||||
elif at_received == 'AT+CSCS=\"HEX\"':
|
||||
sendToTTY('\rOK\r')
|
||||
|
||||
# USSD unsolicited
|
||||
# AT+CUSD Unstructured supplementary service data (ver. 2)
|
||||
# <n>
|
||||
# 0 Disable result code presentation in the TA.Defaultvalue
|
||||
# 1 Enable result code presentation in the TA
|
||||
# 2 Terminate (abort) USSD dialogue. This value is not applicable to the read command response. Notsupported
|
||||
elif at_received == 'AT+CUSD=1':
|
||||
sendToTTY('\rOK\r')
|
||||
|
||||
# Enable +CGEV GPRS event notifications, but don't buffer
|
||||
# AT+CGEREPPacket domain event reporting (ver. 1)
|
||||
elif at_received == 'AT+CGEREP=1,0':
|
||||
sendToTTY('\rOK\r')
|
||||
|
||||
# SMS PDU mode
|
||||
# AT+CMGF Message format (ver. 1)
|
||||
elif at_received == 'AT+CMGF=0':
|
||||
sendToTTY('\rOK\r')
|
||||
|
||||
elif at_received == 'AT+CPIN?':
|
||||
sendToTTY('\r+CPIN: READY\r\nOK\r')
|
||||
#sendToTTY('\rOK\r')
|
||||
|
||||
# AT+CFUNSet phone functionality (ver. 2)
|
||||
# 0 Minimum functionality, that is, the phone is turnedoff. Default value
|
||||
# 1 Full functionality, that is, the phone is turned on
|
||||
# 2 Disable phone transmit RF circuits only. Notsupported
|
||||
# 3 Disable phone receive RF circuits only. Notsupported
|
||||
# 4 Disable phone transmit and receive RF circuits.Note: This is often referred to as "flight mode"
|
||||
# 5 GSM only (WCDMA radio off)
|
||||
# 6 WCDMA only (GSM radio off)
|
||||
elif at_received == 'AT+CFUN?':
|
||||
sendToTTY('+CFUN: 1\r\nOK\r')
|
||||
|
||||
elif at_received == 'AT+CFUN=1':
|
||||
sendToTTY('\rOK\r')
|
||||
|
||||
# AT+CLCCList current calls
|
||||
# Description:
|
||||
# Returns the list of current calls. If command succeeds but no calls areavailable, no information response is sent to TE
|
||||
elif at_received == 'AT+CLCC':
|
||||
sendToTTY('+CLCC: \r\nOK\r')
|
||||
|
||||
# AT+COPSOperator selection (ver. 2)
|
||||
# AT+COPS=[<mode>[,<format>[,<oper>[,AcT]]]]
|
||||
#
|
||||
# <mode> Description
|
||||
# 0 Automatic (<oper> field is ignored.) Default value
|
||||
# 1 Manual (<oper> field will be present)
|
||||
# 2 Deregister from network. Not supported
|
||||
# 3 Set only <format> (for read command +COPS?), donot attempt registration/deregistration (<oper> field is ignored).
|
||||
# This value is not applicable in readcommand response
|
||||
# 4 Manual/automatic (<oper> field will be present). Ifmanual selection fails, automatic mode (<mode>=0)is entered
|
||||
elif at_received == 'AT+COPS=3,0;+COPS?;+COPS=3,1;+COPS?;+COPS=3,2;+COPS?':
|
||||
sendToTTY('+COPS: 0,0, \"Free - Mobile\"\r\n+COPS: 0,1, \"Free\"\r\n+COPS: 0,2, \"310170\"\r\nOK\r')
|
||||
|
||||
elif at_received == 'AT+COPS?':
|
||||
#sendToTTY('+COPS: 0,0, \"Free - Mobile\"\r\n+COPS: 0,1, \"Free\"\r\n+COPS: 0,2, \"310170\"\r\nOK\r')
|
||||
sendToTTY('+COPS: 0,0, \"Free - Mobile\"\r\nOK\r')
|
||||
|
||||
elif at_received == 'AT+COPS=0':
|
||||
#sendToTTY('+COPS: 0,0, \"Free - Mobile\"\r\n+COPS: 0,1, \"Free\"\r\n+COPS: 0,2, \"310170\"\r\nOK\r')
|
||||
sendToTTY('+COPS: 0,0, \"Free - Mobile\"\r\nOK\r')
|
||||
|
||||
# IMEI
|
||||
elif at_received == 'AT+CGSN':
|
||||
sendToTTY('+CGSN:534500314160207\r\nOK\r')
|
||||
|
||||
# Signal quality (ver.1)
|
||||
# Returns received signal strength indication <rssi> and channel bit errorrate <ber> from the phone.
|
||||
elif at_received == 'AT+CSQ':
|
||||
#31,7
|
||||
sendToTTY('+CSQ:8,7\r\nOK\r')
|
||||
|
||||
|
||||
|
||||
else:
|
||||
sendToTTY('\rOK\r')
|
||||
|
||||
|
||||
@@ -1,20 +0,0 @@
|
||||
all: oaisim naslite_netlink_ether
|
||||
|
||||
oaisim:
|
||||
(cd $(OPENAIR_TARGETS)/SIMU/USER && make oaisim OAI_NW_DRIVER_TYPE_ETHERNET=1 PDCP_USE_NETLINK=1)
|
||||
naslite_netlink_ether:
|
||||
(cd $(OPENAIR2_DIR) && make naslite_netlink_ether.ko)
|
||||
(cd $(OPENAIR2_DIR)/NAS/DRIVER/LITE/RB_TOOL/ && make)
|
||||
|
||||
remserial:
|
||||
(cd $(OPENAIR3_DIR)/UTILS/REMSERIAL-1.4.UDP && make all)
|
||||
(cp -upv $(OPENAIR3_DIR)/UTILS/REMSERIAL-1.4.UDP/remserial /usr/bin/remserial.udp)
|
||||
|
||||
one_eNB_one_UE: oaisim naslite_netlink_ether
|
||||
|
||||
userclean: clean oaisim naslite_netlink_ether
|
||||
|
||||
clean:
|
||||
(cd $(OPENAIR_TARGETS)/SIMU/USER && make clean)
|
||||
(cd $(OPENAIR2_DIR)/NAS/DRIVER/LITE && make clean)
|
||||
(cd $(OPENAIR2_DIR) && make clean)
|
||||
@@ -1,86 +0,0 @@
|
||||
#!/bin/sh
|
||||
echo "Bringup eNB interface"
|
||||
|
||||
ip link set oai0 down
|
||||
rmmod nasmesh
|
||||
make naslite_netlink_ether oaisim
|
||||
insmod $OPENAIR2_DIR/NAS/DRIVER/LITE/nasmesh.ko nas_IMEI=3,9,1,8,3,6,6,2,0,0,0,0,0,0
|
||||
|
||||
#avoid conflict with reserved multicast addresses (224.0.0.11,224.0.0.13, 224.0.0.16)
|
||||
#route add -net 224.0.0.0 netmask 240.0.0.0 dev eth2
|
||||
#ip addr add dev eth1 192.168.14.145/24 broadcast 192.168.14.255
|
||||
ip link set oai0 broadcast ff:ff:ff:ff:ff:ff
|
||||
#ip route add 192.168.14.0/24 dev eth2
|
||||
ip route add 224.0.0.160/28 dev eth1
|
||||
ip link set oai0 up
|
||||
sleep 1
|
||||
|
||||
EXTIF="eth0"
|
||||
INTIF="oai0"
|
||||
IPTABLES=/sbin/iptables
|
||||
#IPTABLES=/usr/local/sbin/iptables
|
||||
DEPMOD=/sbin/depmod
|
||||
MODPROBE=/sbin/modprobe
|
||||
echo " External Interface: $EXTIF"
|
||||
echo " Internal Interface: $INTIF"
|
||||
echo "----------------------------------------------------------------------"
|
||||
echo -en "ip_tables, "
|
||||
$MODPROBE ip_tables
|
||||
echo -en "ip_conntrack, "
|
||||
$MODPROBE ip_conntrack
|
||||
echo -en "ip_conntrack_irc, "
|
||||
$MODPROBE ip_conntrack_irc
|
||||
echo -en "iptable_nat, "
|
||||
$MODPROBE iptable_nat
|
||||
echo -e " Done loading modules.\n"
|
||||
echo " Enabling forwarding.."
|
||||
echo "1" > /proc/sys/net/ipv4/ip_forward
|
||||
echo " Enabling DynamicAddr.."
|
||||
echo "1" > /proc/sys/net/ipv4/ip_dynaddr
|
||||
echo " Clearing any existing rules and setting default policy.."
|
||||
$IPTABLES -P INPUT ACCEPT
|
||||
$IPTABLES -F INPUT
|
||||
$IPTABLES -P OUTPUT ACCEPT
|
||||
$IPTABLES -F OUTPUT
|
||||
$IPTABLES -P FORWARD DROP
|
||||
$IPTABLES -F FORWARD
|
||||
$IPTABLES -t nat -F
|
||||
$IPTABLES -t mangle -F
|
||||
$IPTABLES -t filter -F
|
||||
echo " FWD: Allow all connections OUT and only existing and related ones IN"
|
||||
$IPTABLES -A FORWARD -i $EXTIF -o $INTIF -m state --state ESTABLISHED,RELATED -j ACCEPT
|
||||
$IPTABLES -A FORWARD -i $INTIF -o $EXTIF -j ACCEPT
|
||||
#$IPTABLES -A FORWARD -j LOG
|
||||
echo " Enabling SNAT (MASQUERADE) functionality on $EXTIF"
|
||||
$IPTABLES -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE
|
||||
|
||||
|
||||
|
||||
ifconfig oai0 10.0.1.1 netmask 255.255.255.0 broadcast 10.0.1.255
|
||||
sleep 1
|
||||
#$OPENAIR2_DIR/NAS/DRIVER/MESH/RB_TOOL/rb_tool -a -c0 -i0 -z0 -s 10.0.1.1 -t 10.0.1.2 -r 3
|
||||
ip addr add dev oai0 2001:1::1/64
|
||||
# -a -> Add RB
|
||||
# -d -> Delete RB
|
||||
# -cxx -> lcr (uid of a cx_entity)
|
||||
# -ixx -> instance
|
||||
# -zxx -> dscp
|
||||
# -fxxx -> classref (uid of a classifier entry) if fn is used , fn is used for send classifier and n+1 for receive classifier
|
||||
# -sxxx -> source ipv4 address
|
||||
# -txxx -> destination ipv4 address
|
||||
# -x -> source ipv6 address
|
||||
# -y -> destination ipv6 address
|
||||
# -r -> radio bearer id
|
||||
echo "rb_tool -a -c0 -i0 -f0 -z0 -x 2001:1::1/128 -y 2001:1::2/128 -r 1"
|
||||
$OPENAIR2_DIR/NAS/DRIVER/LITE/RB_TOOL/rb_tool -a -c0 -i0 -f0 -z0 -x 2001:1::1/128 -y 2001:1::2/128 -r 1
|
||||
|
||||
echo "rb_tool -a -c0 -i0 -f2 -z63 -s 10.0.1.1/32 -t 10.0.1.2/32 -r 1"
|
||||
$OPENAIR2_DIR/NAS/DRIVER/LITE/RB_TOOL/rb_tool -a -c0 -i0 -f2 -z64 -s 10.0.1.1/32 -t 10.0.1.2/32 -r 1
|
||||
|
||||
echo "rb_tool -a -c0 -i0 -f2 -z63 -s 10.0.1.1/32 -t 10.0.1.2/32 -r 1"
|
||||
$OPENAIR2_DIR/NAS/DRIVER/LITE/RB_TOOL/rb_tool -a -c0 -i0 -f4 -z64 -s 0.0.0.0/32 -t 0.0.0.0/32 -r 1
|
||||
|
||||
echo "to see eNB stats, please run : watch_enb script"
|
||||
echo "$OPENAIR_TARGETS/SIMU/USER/oaisim -u0 -M0 -p2 -g3 -l3 > /dev/null"
|
||||
nice -10 $OPENAIR_TARGETS/SIMU/USER/oaisim -u0 -M0 -p2 -g3 -l3 | grep RLC
|
||||
echo "End"
|
||||
@@ -1,320 +0,0 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
#------------------------------------------------
|
||||
MAKE_IP_DRIVER_TARGET="naslite_netlink_ether"
|
||||
MAKE_LTE_ACCESS_STRATUM_TARGET="oaisim"
|
||||
IP_DRIVER_NAME=oai_nw_drv
|
||||
###########################################################
|
||||
# CONFIGURE OPTIONS
|
||||
EMULIF="eth1"
|
||||
LTEIF="oai0"
|
||||
EXTIF="eth0"
|
||||
INTIF=$LTEIF
|
||||
#----------------------------------------------------------
|
||||
LTE_NETWORK_CIDR="10.0.1.0/24"
|
||||
ENB_IPv4="10.0.1.1"
|
||||
ENB_IPv6="2001:1::1"
|
||||
ENB_IPv6_CIDR=$ENB_IPv6"/64"
|
||||
ENB_IPv4_CIDR=$ENB_IPv4"/24"
|
||||
ENB_IF_ID="3,9,1,8,3,6,6,2,0,0,0,0,0,0"
|
||||
#----------------------------------------------------------
|
||||
UE_IPv4="10.0.1.2"
|
||||
UE_IPv6="2001:1::2"
|
||||
UE_IPv6_CIDR=$UE_IPv6"/64"
|
||||
UE_IPv4_CIDR=$UE_IPv4"/24"
|
||||
#----------------------------------------------------------
|
||||
|
||||
# +-------+ +-------+
|
||||
# | eNB | EMULIF | UE |
|
||||
# | +---------------------+ |
|
||||
# | | | |
|
||||
# | | | |
|
||||
# | | | |
|
||||
# | | | |
|
||||
# | | | |
|
||||
# | | | |
|
||||
# | | LTEIF | |
|
||||
# | +.................... + |
|
||||
# | |ENB_IPv4 UE_IPv4_CIDR| |
|
||||
# +-------+ LTE link over +-------+
|
||||
# UDP over ethernet
|
||||
###########################################################
|
||||
IPTABLES=/sbin/iptables
|
||||
THIS_SCRIPT_PATH=$(dirname $(readlink -f $0))
|
||||
declare -x OPENAIR_DIR=""
|
||||
declare -x OPENAIR1_DIR=""
|
||||
declare -x OPENAIR2_DIR=""
|
||||
declare -x OPENAIR3_DIR=""
|
||||
declare -x OPENAIR_TARGETS=""
|
||||
###########################################################
|
||||
|
||||
|
||||
black='\E[30m'
|
||||
red='\E[31m'
|
||||
green='\E[32m'
|
||||
yellow='\E[33m'
|
||||
blue='\E[34m'
|
||||
magenta='\E[35m'
|
||||
cyan='\E[36m'
|
||||
white='\E[37m'
|
||||
|
||||
ROOT_UID=0
|
||||
E_NOTROOT=67
|
||||
|
||||
|
||||
cecho() # Color-echo
|
||||
# arg1 = message
|
||||
# arg2 = color
|
||||
{
|
||||
local default_msg="No Message."
|
||||
message=${1:-$default_msg}
|
||||
color=${2:-$black}
|
||||
echo -e "$color"
|
||||
echo -n "$message"
|
||||
tput sgr0
|
||||
echo
|
||||
return
|
||||
}
|
||||
|
||||
echo_error() {
|
||||
local my_string=""
|
||||
until [ -z "$1" ]
|
||||
do
|
||||
my_string="$my_string$1"
|
||||
shift
|
||||
done
|
||||
cecho "$my_string" $red
|
||||
}
|
||||
|
||||
echo_warning() {
|
||||
local my_string=""
|
||||
until [ -z "$1" ]
|
||||
do
|
||||
my_string="$my_string$1"
|
||||
shift
|
||||
done
|
||||
cecho "$my_string" $yellow
|
||||
}
|
||||
|
||||
echo_success() {
|
||||
local my_string=""
|
||||
until [ -z "$1" ]
|
||||
do
|
||||
my_string="$my_string$1"
|
||||
shift
|
||||
done
|
||||
cecho "$my_string" $green
|
||||
}
|
||||
|
||||
set_openair() {
|
||||
path=`pwd`
|
||||
declare -i length_path
|
||||
declare -i index
|
||||
length_path=${#path}
|
||||
|
||||
index=`echo $path | grep -b -o 'targets' | cut -d: -f1`
|
||||
#echo ${path%$token*}
|
||||
if [[ $index -lt $length_path && index -gt 0 ]]
|
||||
then
|
||||
declare -x OPENAIR_DIR
|
||||
index=`expr $index - 1`
|
||||
openair_path=`echo $path | cut -c1-$index`
|
||||
#openair_path=`echo ${path:0:$index}`
|
||||
export OPENAIR_DIR=$openair_path
|
||||
export OPENAIR1_DIR=$openair_path/openair1
|
||||
export OPENAIR2_DIR=$openair_path/openair2
|
||||
export OPENAIR3_DIR=$openair_path/openair3
|
||||
export OPENAIR_TARGETS=$openair_path/targets
|
||||
return 0
|
||||
fi
|
||||
return -1
|
||||
}
|
||||
|
||||
bash_exec() {
|
||||
output=$($1 2>&1)
|
||||
result=$?
|
||||
if [ $result -eq 0 ]
|
||||
then
|
||||
echo_success "$1"
|
||||
else
|
||||
echo_error "$1: $output"
|
||||
fi
|
||||
}
|
||||
|
||||
wait_process_started () {
|
||||
if [ -z "$1" ]
|
||||
then
|
||||
echo_error "WAITING FOR PROCESS START: NO PROCESS"
|
||||
return 1
|
||||
fi
|
||||
ps -C $1 > /dev/null 2>&1
|
||||
while [ $? -ne 0 ]; do
|
||||
echo_warning "WAITING FOR $1 START"
|
||||
sleep 2
|
||||
ps -C $1 > /dev/null 2>&1
|
||||
done
|
||||
echo_success "PROCESS $1 STARTED"
|
||||
return 0
|
||||
}
|
||||
|
||||
assert() {
|
||||
# If condition false
|
||||
# exit from script with error message
|
||||
E_PARAM_ERR=98
|
||||
E_PARAM_FAILED=99
|
||||
|
||||
if [ -z "$2" ] # Not enought parameters passed.
|
||||
then
|
||||
return $E_PARAM_ERR
|
||||
fi
|
||||
|
||||
lineno=$2
|
||||
if [ ! $1 ]
|
||||
then
|
||||
echo "Assertion failed: \"$1\""
|
||||
echo "File \"$0\", line $lineno"
|
||||
exit $E_ASSERT_FAILED
|
||||
fi
|
||||
}
|
||||
|
||||
#bash_exec "set_openair"
|
||||
set_openair
|
||||
cecho "OPENAIR_DIR = $OPENAIR_DIR" $green
|
||||
cecho "OPENAIR1_DIR = $OPENAIR1_DIR" $green
|
||||
cecho "OPENAIR2_DIR = $OPENAIR2_DIR" $green
|
||||
cecho "OPENAIR3_DIR = $OPENAIR3_DIR" $green
|
||||
cecho "OPENAIR_TARGETS = $OPENAIR_TARGETS" $green
|
||||
|
||||
|
||||
echo "Bringup UE interface"
|
||||
bash_exec "rmmod $IP_DRIVER_NAME"
|
||||
cecho "make $MAKE_IP_DRIVER_TARGET $MAKE_LTE_ACCESS_STRATUM_TARGET....." $green
|
||||
bash_exec "make $MAKE_IP_DRIVER_TARGET $MAKE_LTE_ACCESS_STRATUM_TARGET"
|
||||
bash_exec "insmod $OPENAIR2_DIR/NAS/DRIVER/LITE/$IP_DRIVER_NAME.ko oai_nw_drv_IMEI=$ENB_IF_ID"
|
||||
|
||||
|
||||
echo " Enabling proxy ARP.."
|
||||
bash_exec "sysctl -w net.ipv4.conf.all.proxy_arp=1"
|
||||
assert "`sysctl -n net.ipv4.conf.all.proxy_arp` -eq 1" $LINENO
|
||||
|
||||
echo " Enabling ipv4 forwarding.."
|
||||
bash_exec "sysctl -w net.ipv4.ip_forward=1"
|
||||
assert "`sysctl -n net.ipv4.ip_forward` -eq 1" $LINENO
|
||||
|
||||
bash_exec "sysctl -w net.ipv4.conf.all.forwarding=1"
|
||||
assert "`sysctl -n net.ipv4.conf.all.forwarding` -eq 1" $LINENO
|
||||
|
||||
echo " Enabling ipv6 forwarding.."
|
||||
bash_exec "sysctl -w net.ipv6.conf.all.forwarding=1"
|
||||
assert "`sysctl -n net.ipv6.conf.all.forwarding` -eq 1" $LINENO
|
||||
|
||||
echo " Enabling DynamicAddr.."
|
||||
bash_exec "sysctl -w net.ipv4.ip_dynaddr=1"
|
||||
assert " `sysctl -n net.ipv4.ip_dynaddr` -eq 1" $LINENO
|
||||
|
||||
bash_exec "ip route flush cache"
|
||||
bash_exec "ip route add 239.0.0.160/28 dev $EMULIF"
|
||||
|
||||
bash_exec "ip link set $LTEIF broadcast ff:ff:ff:ff:ff:ff"
|
||||
bash_exec "ip link set $LTEIF up"
|
||||
sleep 1
|
||||
|
||||
|
||||
assert " -x $IPTABLES " $LINENO
|
||||
|
||||
bash_exec "$IPTABLES -P INPUT ACCEPT"
|
||||
bash_exec "$IPTABLES -F INPUT"
|
||||
bash_exec "$IPTABLES -P OUTPUT ACCEPT"
|
||||
bash_exec "$IPTABLES -F OUTPUT"
|
||||
bash_exec "$IPTABLES -P FORWARD DROP"
|
||||
bash_exec "$IPTABLES -F FORWARD"
|
||||
bash_exec "$IPTABLES -t nat -F"
|
||||
bash_exec "$IPTABLES -t mangle -F"
|
||||
bash_exec "$IPTABLES -t filter -F"
|
||||
|
||||
|
||||
|
||||
echo " External Interface: $EXTIF"
|
||||
echo " Internal Interface: $INTIF"
|
||||
|
||||
bash_exec "modprobe ip_tables"
|
||||
bash_exec "modprobe ip_conntrack"
|
||||
bash_exec "modprobe ip_conntrack_ftp"
|
||||
bash_exec "modprobe nf_conntrack_h323"
|
||||
bash_exec "modprobe nf_conntrack_irc"
|
||||
bash_exec "modprobe nf_conntrack_pptp"
|
||||
bash_exec "modprobe nf_conntrack_proto_gre"
|
||||
bash_exec "modprobe nf_conntrack_proto_sctp"
|
||||
bash_exec "modprobe nf_conntrack_tftp"
|
||||
bash_exec "modprobe nf_conntrack_sip"
|
||||
bash_exec "modprobe iptable_nat"
|
||||
bash_exec "modprobe x_tables"
|
||||
|
||||
|
||||
bash_exec "sysctl -w net.ipv4.conf.all.log_martians=1"
|
||||
assert " `sysctl -n net.ipv4.conf.all.log_martians` -eq 1" $LINENO
|
||||
|
||||
bash_exec "sysctl -w net.ipv4.conf.$LTEIF.log_martians=1"
|
||||
assert " `sysctl -n net.ipv4.conf.$LTEIF.log_martians` -eq 1" $LINENO
|
||||
|
||||
bash_exec "sysctl -w net.ipv4.conf.$EXTIF.log_martians=1"
|
||||
assert " `sysctl -n net.ipv4.conf.$EXTIF.log_martians` -eq 1" $LINENO
|
||||
|
||||
bash_exec "sysctl -w net.ipv4.conf.$INTIF.log_martians=1"
|
||||
assert " `sysctl -n net.ipv4.conf.$INTIF.log_martians` -eq 1" $LINENO
|
||||
|
||||
echo " Disabling reverse path filtering"
|
||||
bash_exec "sysctl -w net.ipv4.conf.all.rp_filter=0"
|
||||
assert " `sysctl -n net.ipv4.conf.all.rp_filter` -eq 0" $LINENO
|
||||
|
||||
bash_exec "sysctl -w net.ipv4.conf.$LTEIF.rp_filter=0"
|
||||
assert " `sysctl -n net.ipv4.conf.$LTEIF.rp_filter` -eq 0" $LINENO
|
||||
|
||||
bash_exec "sysctl -w net.ipv4.conf.$EXTIF.rp_filter=0"
|
||||
assert " `sysctl -n net.ipv4.conf.$EXTIF.rp_filter` -eq 0" $LINENO
|
||||
|
||||
bash_exec "sysctl -w net.ipv4.conf.$INTIF.rp_filter=0"
|
||||
assert " `sysctl -n net.ipv4.conf.$INTIF.rp_filter` -eq 0" $LINENO
|
||||
|
||||
|
||||
bash_exec "$IPTABLES -A FORWARD -i $EXTIF -o $INTIF -m state --state ESTABLISHED,RELATED -j ACCEPT"
|
||||
bash_exec "$IPTABLES -A FORWARD -i $INTIF -o $EXTIF -j ACCEPT"
|
||||
bash_exec "$IPTABLES -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE"
|
||||
|
||||
bash_exec "ip route flush cache"
|
||||
|
||||
|
||||
bash_exec "ip addr add dev $LTEIF $ENB_IPv4_CIDR"
|
||||
sleep 1
|
||||
bash_exec "ip addr add dev $LTEIF $ENB_IPv6_CIDR"
|
||||
sleep 1
|
||||
|
||||
# -a -> Add RB
|
||||
# -d -> Delete RB
|
||||
# -cxx -> lcr
|
||||
# -ixx -> instance
|
||||
# -zxx -> dscp
|
||||
# -fxxx -> classref (uid of a classifier entry) if fn is used , fn is used for send classifier and n+1 for receive classifier
|
||||
# -sxxx -> source ipv4 address
|
||||
# -txxx -> destination ipv4 address
|
||||
# -x -> source ipv6 address
|
||||
# -y -> destination ipv6 address
|
||||
# -r -> radio bearer id
|
||||
bash_exec "$OPENAIR2_DIR/NAS/DRIVER/LITE/RB_TOOL/rb_tool -a -c0 -f0 -i0 -z0 -x $ENB_IPv6 -y $UE_IPv6 -r 1"
|
||||
bash_exec "$OPENAIR2_DIR/NAS/DRIVER/LITE/RB_TOOL/rb_tool -a -c0 -f2 -i0 -z64 -s $ENB_IPv4/32 -t $UE_IPv4/32 -r 1"
|
||||
bash_exec "$OPENAIR2_DIR/NAS/DRIVER/LITE/RB_TOOL/rb_tool -a -c0 -f4 -i0 -z64 -s 0.0.0.0/32 -t 0.0.0.0/32 -r 1"
|
||||
sleep 1
|
||||
|
||||
echo "#####################################################################"
|
||||
echo "iptables -t nat -nvL"
|
||||
echo "---------------------------------------------------------------------"
|
||||
iptables -t nat -nvL
|
||||
echo "#####################################################################"
|
||||
echo "ip route show table main"
|
||||
echo "---------------------------------------------------------------------"
|
||||
ip route show table main
|
||||
|
||||
echo "$OPENAIR_TARGETS/SIMU/USER/oaisim -u0 -M0 -p2 -g3 -l3 > /dev/null"
|
||||
nice -10 $OPENAIR_TARGETS/SIMU/USER/oaisim -u0 -M0 -p2 -g3 -l3 > /dev/null
|
||||
|
||||
|
||||
@@ -1,259 +0,0 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
#------------------------------------------------
|
||||
MAKE_IP_DRIVER_TARGET="naslite_netlink_ether"
|
||||
MAKE_LTE_ACCESS_STRATUM_TARGET="oaisim"
|
||||
IP_DRIVER_NAME=oai_nw_drv
|
||||
###########################################################
|
||||
# CONFIGURE OPTIONS
|
||||
EMULIF="eth0"
|
||||
LTEIF="oai0"
|
||||
|
||||
#----------------------------------------------------------
|
||||
LTE_NETWORK_CIDR="10.0.1.0/24"
|
||||
ENB_IPv4="10.0.1.1"
|
||||
ENB_IPv6="2001:1::1"
|
||||
#----------------------------------------------------------
|
||||
UE_IPv4="10.0.1.2"
|
||||
UE_IPv6="2001:1::2"
|
||||
UE_IPv6_CIDR=$UE_IPv6"/64"
|
||||
UE_IPv4_CIDR=$UE_IPv4"/24"
|
||||
UE_IMEI="3,9,1,8,3,6,7,3,0,0,0,0,0,0"
|
||||
#----------------------------------------------------------
|
||||
|
||||
# +-------+ +-------+
|
||||
# | eNB | EMULIF | UE |
|
||||
# | +---------------------+ +
|
||||
# | | | |
|
||||
# | | | |
|
||||
# | | | |
|
||||
# | | | |
|
||||
# | | | +
|
||||
# | | | |
|
||||
# | | LTEIF | |
|
||||
# | +.................... + |
|
||||
# | |ENB_IPv4 UE_IPv4_CIDR| |
|
||||
# +-------+ LTE link over +-------+
|
||||
|
||||
###########################################################
|
||||
IPTABLES=/sbin/iptables
|
||||
THIS_SCRIPT_PATH=$(dirname $(readlink -f $0))
|
||||
declare -x OPENAIR_DIR=""
|
||||
declare -x OPENAIR1_DIR=""
|
||||
declare -x OPENAIR2_DIR=""
|
||||
declare -x OPENAIR3_DIR=""
|
||||
declare -x OPENAIR_TARGETS=""
|
||||
###########################################################
|
||||
|
||||
|
||||
black='\E[30m'
|
||||
red='\E[31m'
|
||||
green='\E[32m'
|
||||
yellow='\E[33m'
|
||||
blue='\E[34m'
|
||||
magenta='\E[35m'
|
||||
cyan='\E[36m'
|
||||
white='\E[37m'
|
||||
|
||||
ROOT_UID=0
|
||||
E_NOTROOT=67
|
||||
|
||||
|
||||
cecho() # Color-echo
|
||||
# arg1 = message
|
||||
# arg2 = color
|
||||
{
|
||||
local default_msg="No Message."
|
||||
message=${1:-$default_msg}
|
||||
color=${2:-$black}
|
||||
echo -e "$color"
|
||||
echo -n "$message"
|
||||
tput sgr0
|
||||
echo
|
||||
return
|
||||
}
|
||||
|
||||
echo_error() {
|
||||
local my_string=""
|
||||
until [ -z "$1" ]
|
||||
do
|
||||
my_string="$my_string$1"
|
||||
shift
|
||||
done
|
||||
cecho "$my_string" $red
|
||||
}
|
||||
|
||||
echo_warning() {
|
||||
local my_string=""
|
||||
until [ -z "$1" ]
|
||||
do
|
||||
my_string="$my_string$1"
|
||||
shift
|
||||
done
|
||||
cecho "$my_string" $yellow
|
||||
}
|
||||
|
||||
echo_success() {
|
||||
local my_string=""
|
||||
until [ -z "$1" ]
|
||||
do
|
||||
my_string="$my_string$1"
|
||||
shift
|
||||
done
|
||||
cecho "$my_string" $green
|
||||
}
|
||||
|
||||
set_openair() {
|
||||
path=`pwd`
|
||||
declare -i length_path
|
||||
declare -i index
|
||||
length_path=${#path}
|
||||
|
||||
index=`echo $path | grep -b -o 'targets' | cut -d: -f1`
|
||||
#echo ${path%$token*}
|
||||
if [[ $index -lt $length_path && index -gt 0 ]]
|
||||
then
|
||||
declare -x OPENAIR_DIR
|
||||
index=`expr $index - 1`
|
||||
openair_path=`echo $path | cut -c1-$index`
|
||||
#openair_path=`echo ${path:0:$index}`
|
||||
export OPENAIR_DIR=$openair_path
|
||||
export OPENAIR1_DIR=$openair_path/openair1
|
||||
export OPENAIR2_DIR=$openair_path/openair2
|
||||
export OPENAIR3_DIR=$openair_path/openair3
|
||||
export OPENAIR_TARGETS=$openair_path/targets
|
||||
return 0
|
||||
fi
|
||||
return -1
|
||||
}
|
||||
|
||||
bash_exec() {
|
||||
output=$($1 2>&1)
|
||||
result=$?
|
||||
if [ $result -eq 0 ]
|
||||
then
|
||||
echo_success "$1"
|
||||
else
|
||||
echo_error "$1: $output"
|
||||
fi
|
||||
}
|
||||
|
||||
wait_process_started () {
|
||||
if [ -z "$1" ]
|
||||
then
|
||||
echo_error "WAITING FOR PROCESS START: NO PROCESS"
|
||||
return 1
|
||||
fi
|
||||
ps -C $1 > /dev/null 2>&1
|
||||
while [ $? -ne 0 ]; do
|
||||
echo_warning "WAITING FOR $1 START"
|
||||
sleep 2
|
||||
ps -C $1 > /dev/null 2>&1
|
||||
done
|
||||
echo_success "PROCESS $1 STARTED"
|
||||
return 0
|
||||
}
|
||||
|
||||
assert() {
|
||||
# If condition false
|
||||
# exit from script with error message
|
||||
E_PARAM_ERR=98
|
||||
E_PARAM_FAILED=99
|
||||
|
||||
if [ -z "$2" ] # Not enought parameters passed.
|
||||
then
|
||||
return $E_PARAM_ERR
|
||||
fi
|
||||
|
||||
lineno=$2
|
||||
if [ ! $1 ]
|
||||
then
|
||||
echo "Assertion failed: \"$1\""
|
||||
echo "File \"$0\", line $lineno"
|
||||
exit $E_ASSERT_FAILED
|
||||
fi
|
||||
}
|
||||
|
||||
ctrl_c() {
|
||||
bash_exec "pkill oaisim"
|
||||
bash_exec "ip link set $LTEIF down"
|
||||
|
||||
bash_exec "rmmod $IP_DRIVER_NAME"
|
||||
|
||||
bash_exec "$IPTABLES -P INPUT ACCEPT"
|
||||
bash_exec "$IPTABLES -F INPUT"
|
||||
bash_exec "$IPTABLES -P OUTPUT ACCEPT"
|
||||
bash_exec "$IPTABLES -F OUTPUT"
|
||||
bash_exec "$IPTABLES -P FORWARD ACCEPT"
|
||||
bash_exec "$IPTABLES -F FORWARD"
|
||||
bash_exec "$IPTABLES -t nat -F"
|
||||
bash_exec "$IPTABLES -t mangle -F"
|
||||
bash_exec "$IPTABLES -t filter -F"
|
||||
bash_exec "ip route flush cache"
|
||||
}
|
||||
|
||||
#bash_exec "set_openair"
|
||||
set_openair
|
||||
cecho "OPENAIR_DIR = $OPENAIR_DIR" $green
|
||||
cecho "OPENAIR1_DIR = $OPENAIR1_DIR" $green
|
||||
cecho "OPENAIR2_DIR = $OPENAIR2_DIR" $green
|
||||
cecho "OPENAIR3_DIR = $OPENAIR3_DIR" $green
|
||||
cecho "OPENAIR_TARGETS = $OPENAIR_TARGETS" $green
|
||||
|
||||
echo "Bringup UE interface"
|
||||
bash_exec "rmmod $IP_DRIVER_NAME"
|
||||
cecho "make $MAKE_IP_DRIVER_TARGET $MAKE_LTE_ACCESS_STRATUM_TARGET ....." $green
|
||||
bash_exec "make $MAKE_IP_DRIVER_TARGET $MAKE_LTE_ACCESS_STRATUM_TARGET "
|
||||
bash_exec "insmod $OPENAIR2_DIR/NAS/DRIVER/LITE/$IP_DRIVER_NAME.ko oai_nw_drv_IMEI=$UE_IMEI"
|
||||
|
||||
bash_exec "ip route flush cache"
|
||||
bash_exec "ip route add 239.0.0.160/28 dev $EMULIF"
|
||||
|
||||
bash_exec "ip link set $LTEIF broadcast ff:ff:ff:ff:ff:ff"
|
||||
bash_exec "ip link set $LTEIF up"
|
||||
sleep 1
|
||||
bash_exec "ip addr add dev $LTEIF $UE_IPv4_CIDR"
|
||||
bash_exec "ip addr add dev $LTEIF $UE_IPv6_CIDR"
|
||||
|
||||
# -a -> Add RB
|
||||
# -d -> Delete RB
|
||||
# -cxx -> lcr
|
||||
# -ixx -> instance
|
||||
# -zxx -> dscp
|
||||
# -fxxx -> classref (uid of a classifier entry) if fn is used , fn is used for send classifier and n+1 for receive classifier
|
||||
# -sxxx -> source ipv4 address
|
||||
# -txxx -> destination ipv4 address
|
||||
# -x -> source ipv6 address
|
||||
# -y -> destination ipv6 address
|
||||
# -r -> radio bearer id
|
||||
bash_exec "$OPENAIR2_DIR/NAS/DRIVER/LITE/RB_TOOL/rb_tool -a -c0 -f0 -i0 -z0 -x $UE_IPv6 -y $ENB_IPv6 -r 1"
|
||||
bash_exec "$OPENAIR2_DIR/NAS/DRIVER/LITE/RB_TOOL/rb_tool -a -c0 -f2 -i0 -z64 -s $UE_IPv4/32 -t $ENB_IPv4/32 -r 1"
|
||||
bash_exec "$OPENAIR2_DIR/NAS/DRIVER/LITE/RB_TOOL/rb_tool -a -c0 -f4 -i0 -z64 -s 0.0.0.0/32 -t 0.0.0.0/32 -r 1"
|
||||
sleep 1
|
||||
|
||||
bash_exec "sysctl -w net.ipv4.conf.all.log_martians=1"
|
||||
assert " `sysctl -n net.ipv4.conf.all.log_martians` -eq 1" $LINENO
|
||||
|
||||
echo " Disabling reverse path filtering"
|
||||
bash_exec "sysctl -w net.ipv4.conf.all.rp_filter=0"
|
||||
assert " `sysctl -n net.ipv4.conf.all.rp_filter` -eq 0" $LINENO
|
||||
|
||||
|
||||
bash_exec "ip route flush cache"
|
||||
|
||||
echo "#####################################################################"
|
||||
echo "ip route show table main"
|
||||
echo "---------------------------------------------------------------------"
|
||||
ip route show table main
|
||||
|
||||
trap ctrl_c INT
|
||||
|
||||
echo "to see UE stats, please run : watch_ue script"
|
||||
echo "$OPENAIR_TARGETS/SIMU/USER/oaisim -b0 -M1 -p2 -g3 -l3 > /dev/null"
|
||||
nice -10 $OPENAIR_TARGETS/SIMU/USER/oaisim -b0 -M1 -p2 -g3 -l3 > /dev/null
|
||||
#gdb $OPENAIR_TARGETS/SIMU/USER/oaisim
|
||||
echo "End"
|
||||
ctrl_c
|
||||
|
||||
|
||||
|
||||
@@ -1,426 +0,0 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
#------------------------------------------------
|
||||
MAKE_IP_DRIVER_TARGET="naslite_netlink_ether"
|
||||
MAKE_LTE_ACCESS_STRATUM_TARGET="oaisim"
|
||||
MAKE_REMSERIAL_TARGET="remserial"
|
||||
IP_DRIVER_NAME=oai_nw_drv
|
||||
###########################################################
|
||||
# CONFIGURE OPTIONS
|
||||
EMULIF="eth0"
|
||||
LTEIF="oai0"
|
||||
|
||||
INTIF="ppp0"
|
||||
EXTIF=$LTEIF
|
||||
#----------------------------------------------------------
|
||||
LTE_NETWORK_CIDR="10.0.1.0/24"
|
||||
ENB_IPv4="10.0.1.1"
|
||||
ENB_IPv6="2001:1::1"
|
||||
#----------------------------------------------------------
|
||||
UE_IPv4="10.0.1.2"
|
||||
UE_IPv6="2001:1::2"
|
||||
UE_IPv6_CIDR=$UE_IPv6"/64"
|
||||
UE_IPv4_CIDR=$UE_IPv4"/24"
|
||||
UE_IMEI="3,9,1,8,3,6,7,3,0,0,0,0,0,0"
|
||||
#----------------------------------------------------------
|
||||
USE_PPP="yes"
|
||||
PPP_OPTIONS="proxyarp passive nodetach ipcp-accept-remote"
|
||||
PPP_DEVICE="ttyPPP_DROID"
|
||||
PPP_SPEED="460800"
|
||||
UE_PPP_IPv4="192.168.15.1"
|
||||
TERMINAL_PPP_IPv4="192.168.15.175"
|
||||
REMSERIAL_UDP_PORT="23001"
|
||||
#----------------------------------------------------------
|
||||
|
||||
# +-------+ +-------+ +-------+
|
||||
# | eNB | EMULIF | UE |INTIF |ANDROID|
|
||||
# | +---------------------+ +---------------------+ TERMIN|
|
||||
# | | | | ppp link over | AL |
|
||||
# | | | | UDP over ethernet | |
|
||||
# | | | | (remserial) | |
|
||||
# | | | | | |
|
||||
# | | | +---serial link-------+ |
|
||||
# | | | | for AT commands | |
|
||||
# | | LTEIF | | | |
|
||||
# | +.................... + | | |
|
||||
# | |ENB_IPv4 UE_IPv4_CIDR| | | |
|
||||
# +-------+ LTE link over +-------+ +-------+
|
||||
|
||||
###########################################################
|
||||
IPTABLES=/sbin/iptables
|
||||
THIS_SCRIPT_PATH=$(dirname $(readlink -f $0))
|
||||
declare -x OPENAIR_DIR=""
|
||||
declare -x OPENAIR1_DIR=""
|
||||
declare -x OPENAIR2_DIR=""
|
||||
declare -x OPENAIR3_DIR=""
|
||||
declare -x OPENAIR_TARGETS=""
|
||||
###########################################################
|
||||
|
||||
|
||||
black='\E[30m'
|
||||
red='\E[31m'
|
||||
green='\E[32m'
|
||||
yellow='\E[33m'
|
||||
blue='\E[34m'
|
||||
magenta='\E[35m'
|
||||
cyan='\E[36m'
|
||||
white='\E[37m'
|
||||
|
||||
ROOT_UID=0
|
||||
E_NOTROOT=67
|
||||
|
||||
|
||||
cecho() # Color-echo
|
||||
# arg1 = message
|
||||
# arg2 = color
|
||||
{
|
||||
local default_msg="No Message."
|
||||
message=${1:-$default_msg}
|
||||
color=${2:-$black}
|
||||
echo -e "$color"
|
||||
echo -n "$message"
|
||||
tput sgr0
|
||||
echo
|
||||
return
|
||||
}
|
||||
|
||||
echo_error() {
|
||||
local my_string=""
|
||||
until [ -z "$1" ]
|
||||
do
|
||||
my_string="$my_string$1"
|
||||
shift
|
||||
done
|
||||
cecho "$my_string" $red
|
||||
}
|
||||
|
||||
echo_warning() {
|
||||
local my_string=""
|
||||
until [ -z "$1" ]
|
||||
do
|
||||
my_string="$my_string$1"
|
||||
shift
|
||||
done
|
||||
cecho "$my_string" $yellow
|
||||
}
|
||||
|
||||
echo_success() {
|
||||
local my_string=""
|
||||
until [ -z "$1" ]
|
||||
do
|
||||
my_string="$my_string$1"
|
||||
shift
|
||||
done
|
||||
cecho "$my_string" $green
|
||||
}
|
||||
|
||||
set_openair() {
|
||||
path=`pwd`
|
||||
declare -i length_path
|
||||
declare -i index
|
||||
length_path=${#path}
|
||||
|
||||
index=`echo $path | grep -b -o 'targets' | cut -d: -f1`
|
||||
#echo ${path%$token*}
|
||||
if [[ $index -lt $length_path && index -gt 0 ]]
|
||||
then
|
||||
declare -x OPENAIR_DIR
|
||||
index=`expr $index - 1`
|
||||
openair_path=`echo $path | cut -c1-$index`
|
||||
#openair_path=`echo ${path:0:$index}`
|
||||
export OPENAIR_DIR=$openair_path
|
||||
export OPENAIR1_DIR=$openair_path/openair1
|
||||
export OPENAIR2_DIR=$openair_path/openair2
|
||||
export OPENAIR3_DIR=$openair_path/openair3
|
||||
export OPENAIR_TARGETS=$openair_path/targets
|
||||
return 0
|
||||
fi
|
||||
return -1
|
||||
}
|
||||
|
||||
bash_exec() {
|
||||
output=$($1 2>&1)
|
||||
result=$?
|
||||
if [ $result -eq 0 ]
|
||||
then
|
||||
echo_success "$1"
|
||||
else
|
||||
echo_error "$1: $output"
|
||||
fi
|
||||
}
|
||||
|
||||
wait_process_started () {
|
||||
if [ -z "$1" ]
|
||||
then
|
||||
echo_error "WAITING FOR PROCESS START: NO PROCESS"
|
||||
return 1
|
||||
fi
|
||||
ps -C $1 > /dev/null 2>&1
|
||||
while [ $? -ne 0 ]; do
|
||||
echo_warning "WAITING FOR $1 START"
|
||||
sleep 2
|
||||
ps -C $1 > /dev/null 2>&1
|
||||
done
|
||||
echo_success "PROCESS $1 STARTED"
|
||||
return 0
|
||||
}
|
||||
|
||||
assert() {
|
||||
# If condition false
|
||||
# exit from script with error message
|
||||
E_PARAM_ERR=98
|
||||
E_PARAM_FAILED=99
|
||||
|
||||
if [ -z "$2" ] # Not enought parameters passed.
|
||||
then
|
||||
return $E_PARAM_ERR
|
||||
fi
|
||||
|
||||
lineno=$2
|
||||
if [ ! $1 ]
|
||||
then
|
||||
echo "Assertion failed: \"$1\""
|
||||
echo "File \"$0\", line $lineno"
|
||||
exit $E_ASSERT_FAILED
|
||||
fi
|
||||
}
|
||||
|
||||
ctrl_c() {
|
||||
bash_exec "pkill oaisim"
|
||||
if [ "$USE_PPP"x = yesx ]; then
|
||||
bash_exec "pkill remserial.bash"
|
||||
bash_exec "pkill ppp_android.bash"
|
||||
fi
|
||||
bash_exec "pkill AT_serial_bouchon.py"
|
||||
bash_exec "ip link set $LTEIF down"
|
||||
|
||||
bash_exec "ip route del default via $ENB_IPv4 dev $EXTIF table int2lte"
|
||||
bash_exec "ip route flush table int2lte"
|
||||
bash_exec "ip rule del prio 1000"
|
||||
|
||||
bash_exec "rmmod $IP_DRIVER_NAME"
|
||||
|
||||
bash_exec "$IPTABLES -P INPUT ACCEPT"
|
||||
bash_exec "$IPTABLES -F INPUT"
|
||||
bash_exec "$IPTABLES -P OUTPUT ACCEPT"
|
||||
bash_exec "$IPTABLES -F OUTPUT"
|
||||
bash_exec "$IPTABLES -P FORWARD ACCEPT"
|
||||
bash_exec "$IPTABLES -F FORWARD"
|
||||
bash_exec "$IPTABLES -t nat -F"
|
||||
bash_exec "$IPTABLES -t mangle -F"
|
||||
bash_exec "$IPTABLES -t filter -F"
|
||||
bash_exec "ip route flush cache"
|
||||
}
|
||||
|
||||
#bash_exec "set_openair"
|
||||
set_openair
|
||||
cecho "OPENAIR_DIR = $OPENAIR_DIR" $green
|
||||
cecho "OPENAIR1_DIR = $OPENAIR1_DIR" $green
|
||||
cecho "OPENAIR2_DIR = $OPENAIR2_DIR" $green
|
||||
cecho "OPENAIR3_DIR = $OPENAIR3_DIR" $green
|
||||
cecho "OPENAIR_TARGETS = $OPENAIR_TARGETS" $green
|
||||
|
||||
echo "Bringup UE interface"
|
||||
bash_exec "rmmod $IP_DRIVER_NAME"
|
||||
cecho "make $MAKE_IP_DRIVER_TARGET $MAKE_LTE_ACCESS_STRATUM_TARGET $MAKE_REMSERIAL_TARGET....." $green
|
||||
bash_exec "make $MAKE_IP_DRIVER_TARGET $MAKE_LTE_ACCESS_STRATUM_TARGET $MAKE_REMSERIAL_TARGET"
|
||||
bash_exec "insmod $OPENAIR2_DIR/NAS/DRIVER/LITE/$IP_DRIVER_NAME.ko oai_nw_drv_IMEI=$UE_IMEI"
|
||||
|
||||
|
||||
echo " Enabling ipv4 forwarding.."
|
||||
bash_exec "sysctl -w net.ipv4.ip_forward=1"
|
||||
assert "`sysctl -n net.ipv4.ip_forward` -eq 1" $LINENO
|
||||
|
||||
bash_exec "sysctl -w net.ipv4.conf.all.forwarding=1"
|
||||
assert "`sysctl -n net.ipv4.conf.all.forwarding` -eq 1" $LINENO
|
||||
|
||||
echo " Enabling ipv6 forwarding.."
|
||||
bash_exec "sysctl -w net.ipv6.conf.all.forwarding=1"
|
||||
assert "`sysctl -n net.ipv6.conf.all.forwarding` -eq 1" $LINENO
|
||||
|
||||
|
||||
if [ "$USE_PPP"x = yesx ]; then
|
||||
echo " PPP enabled.."
|
||||
command -v pppd > /dev/null 2>&1 || { echo_error "pppd executable needed - please install it"; exit 1;}
|
||||
command -v remserial.udp > /dev/null 2>&1 || { echo_error "remserial.udp executable needed - please install it"; exit 1;}
|
||||
#generate pppd script
|
||||
rm -f /tmp/ppp_android.bash
|
||||
bash_exec "touch /tmp/ppp_android.bash"
|
||||
if [ ! -f /tmp/ppp_android.bash ]; then
|
||||
echo_error "Cannot generate /tmp/ppp_android.bash file, exiting"
|
||||
exit 1
|
||||
fi
|
||||
echo "#!/bin/bash" >> /tmp/ppp_android.bash
|
||||
echo "pppd $PPP_OPTIONS $UE_PPP_IPv4:$TERMINAL_PPP_IPv4 /dev/$PPP_DEVICE $PPP_SPEED" >> /tmp/ppp_android.bash
|
||||
bash_exec "chmod 777 /tmp/ppp_android.bash"
|
||||
assert " -x /tmp/ppp_android.bash " $LINENO
|
||||
|
||||
#generate remserial script
|
||||
rm -f /tmp/remserial.bash
|
||||
bash_exec "touch /tmp/remserial.bash"
|
||||
if [ ! -f /tmp/remserial.bash ]; then
|
||||
echo_error "Cannot generate /tmp/remserial.bash file, exiting"
|
||||
exit 1
|
||||
fi
|
||||
echo "#!/bin/bash" >> /tmp/remserial.bash
|
||||
echo "remserial.udp -s \"$PPP_SPEED raw\" -p $REMSERIAL_UDP_PORT -l /dev/$PPP_DEVICE /dev/ptmx" >> /tmp/remserial.bash
|
||||
bash_exec "chmod 777 /tmp/remserial.bash"
|
||||
assert " -x /tmp/remserial.bash " $LINENO
|
||||
fi
|
||||
|
||||
xterm -e $THIS_SCRIPT_PATH/AT_serial_bouchon.py &
|
||||
wait_process_started AT_serial_bouchon.py
|
||||
|
||||
if [ "$USE_PPP"x = yesx ]; then
|
||||
xterm -e /tmp/remserial.bash &
|
||||
wait_process_started remserial.bash
|
||||
|
||||
xterm -e /tmp/ppp_android.bash &
|
||||
wait_process_started ppp_android.bash
|
||||
fi
|
||||
|
||||
|
||||
assert " -x $IPTABLES " $LINENO
|
||||
|
||||
bash_exec "ip route del default via $ENB_IPv4 dev $EXTIF table int2lte"
|
||||
bash_exec "ip route flush table int2lte"
|
||||
bash_exec "ip rule del prio 1000"
|
||||
|
||||
bash_exec "$IPTABLES -P INPUT ACCEPT"
|
||||
bash_exec "$IPTABLES -F INPUT"
|
||||
bash_exec "$IPTABLES -P OUTPUT ACCEPT"
|
||||
bash_exec "$IPTABLES -F OUTPUT"
|
||||
bash_exec "$IPTABLES -P FORWARD DROP"
|
||||
bash_exec "$IPTABLES -F FORWARD"
|
||||
bash_exec "$IPTABLES -t nat -F"
|
||||
bash_exec "$IPTABLES -t mangle -F"
|
||||
bash_exec "$IPTABLES -t filter -F"
|
||||
|
||||
bash_exec "ip route flush cache"
|
||||
bash_exec "ip route add 239.0.0.160/28 dev $EMULIF"
|
||||
|
||||
bash_exec "ip link set $LTEIF broadcast ff:ff:ff:ff:ff:ff"
|
||||
bash_exec "ip link set $LTEIF up"
|
||||
sleep 1
|
||||
bash_exec "ip addr add dev $LTEIF $UE_IPv4_CIDR"
|
||||
bash_exec "ip addr add dev $LTEIF $UE_IPv6_CIDR"
|
||||
|
||||
echo " Enabling proxy ARP.."
|
||||
bash_exec "sysctl -w net.ipv4.conf.all.proxy_arp=1"
|
||||
assert "`sysctl -n net.ipv4.conf.all.proxy_arp` -eq 1" $LINENO
|
||||
|
||||
|
||||
# -a -> Add RB
|
||||
# -d -> Delete RB
|
||||
# -cxx -> lcr
|
||||
# -ixx -> instance
|
||||
# -zxx -> dscp
|
||||
# -fxxx -> classref (uid of a classifier entry) if fn is used , fn is used for send classifier and n+1 for receive classifier
|
||||
# -sxxx -> source ipv4 address
|
||||
# -txxx -> destination ipv4 address
|
||||
# -x -> source ipv6 address
|
||||
# -y -> destination ipv6 address
|
||||
# -r -> radio bearer id
|
||||
bash_exec "$OPENAIR2_DIR/NAS/DRIVER/LITE/RB_TOOL/rb_tool -a -c0 -f0 -i0 -z0 -x $UE_IPv6 -y $ENB_IPv6 -r 3"
|
||||
bash_exec "$OPENAIR2_DIR/NAS/DRIVER/LITE/RB_TOOL/rb_tool -a -c0 -f2 -i0 -z64 -s $UE_IPv4/32 -t $ENB_IPv4/32 -r 3"
|
||||
bash_exec "$OPENAIR2_DIR/NAS/DRIVER/LITE/RB_TOOL/rb_tool -a -c0 -f4 -i0 -z64 -s 0.0.0.0/32 -t 0.0.0.0/32 -r 3"
|
||||
sleep 1
|
||||
|
||||
echo " External Interface: $EXTIF"
|
||||
echo " Internal Interface: $INTIF"
|
||||
|
||||
bash_exec "modprobe ip_tables"
|
||||
bash_exec "modprobe ip_conntrack"
|
||||
bash_exec "modprobe ip_conntrack_ftp"
|
||||
bash_exec "modprobe nf_conntrack_h323"
|
||||
bash_exec "modprobe nf_conntrack_irc"
|
||||
bash_exec "modprobe nf_conntrack_pptp"
|
||||
bash_exec "modprobe nf_conntrack_proto_gre"
|
||||
bash_exec "modprobe nf_conntrack_proto_sctp"
|
||||
bash_exec "modprobe nf_conntrack_tftp"
|
||||
bash_exec "modprobe nf_conntrack_sip"
|
||||
bash_exec "modprobe iptable_nat"
|
||||
bash_exec "modprobe x_tables"
|
||||
|
||||
echo " Enabling DynamicAddr.."
|
||||
bash_exec "sysctl -w net.ipv4.ip_dynaddr=1"
|
||||
assert " `sysctl -n net.ipv4.ip_dynaddr` -eq 1" $LINENO
|
||||
|
||||
bash_exec "sysctl -w net.ipv4.conf.all.log_martians=1"
|
||||
assert " `sysctl -n net.ipv4.conf.all.log_martians` -eq 1" $LINENO
|
||||
|
||||
bash_exec "sysctl -w net.ipv4.conf.$LTEIF.log_martians=1"
|
||||
assert " `sysctl -n net.ipv4.conf.$LTEIF.log_martians` -eq 1" $LINENO
|
||||
|
||||
bash_exec "sysctl -w net.ipv4.conf.$EMULIF.log_martians=1"
|
||||
assert " `sysctl -n net.ipv4.conf.$EMULIF.log_martians` -eq 1" $LINENO
|
||||
|
||||
if [ ! "$USE_PPP"x = yesx ]; then
|
||||
bash_exec "sysctl -w net.ipv4.conf.$INTIF.log_martians=1"
|
||||
assert " `sysctl -n net.ipv4.conf.$INTIF.log_martians` -eq 1" $LINENO
|
||||
fi
|
||||
echo " Disabling reverse path filtering"
|
||||
bash_exec "sysctl -w net.ipv4.conf.all.rp_filter=0"
|
||||
assert " `sysctl -n net.ipv4.conf.all.rp_filter` -eq 0" $LINENO
|
||||
|
||||
bash_exec "sysctl -w net.ipv4.conf.$LTEIF.rp_filter=0"
|
||||
assert " `sysctl -n net.ipv4.conf.$LTEIF.rp_filter` -eq 0" $LINENO
|
||||
|
||||
bash_exec "sysctl -w net.ipv4.conf.$EMULIF.rp_filter=0"
|
||||
assert " `sysctl -n net.ipv4.conf.$EMULIF.rp_filter` -eq 0" $LINENO
|
||||
|
||||
if [ ! "$USE_PPP"x = yesx ]; then
|
||||
bash_exec "sysctl -w net.ipv4.conf.$INTIF.rp_filter=0"
|
||||
assert " `sysctl -n net.ipv4.conf.$INTIF.rp_filter` -eq 0" $LINENO
|
||||
fi
|
||||
|
||||
bash_exec "$IPTABLES -t mangle -A PREROUTING -i $INTIF -j MARK --set-mark 22"
|
||||
|
||||
bash_exec "$IPTABLES -A FORWARD -i $EXTIF -o $INTIF -m state --state ESTABLISHED,RELATED -j ACCEPT"
|
||||
bash_exec "$IPTABLES -A FORWARD -i $INTIF -o $EXTIF -j ACCEPT"
|
||||
bash_exec "$IPTABLES -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE"
|
||||
|
||||
bash_exec "ip route add 127.0.0.0/8 dev lo table int2lte"
|
||||
bash_exec "ip route add $LTE_NETWORK_CIDR dev $EXTIF table int2lte scope link"
|
||||
bash_exec "ip route add default via $ENB_IPv4 dev $EXTIF table int2lte scope global"
|
||||
|
||||
bash_exec "ip route flush cache"
|
||||
|
||||
bash_exec "ip rule add fwmark 22 lookup int2lte prio 1000"
|
||||
|
||||
echo "#####################################################################"
|
||||
echo "iptables -t nat -nvL"
|
||||
echo "---------------------------------------------------------------------"
|
||||
iptables -t nat -nvL
|
||||
echo "#####################################################################"
|
||||
echo "iptables -t mangle -nvL"
|
||||
echo "---------------------------------------------------------------------"
|
||||
iptables -t mangle -nvL
|
||||
echo "#####################################################################"
|
||||
echo "iptables -t filter -nvL"
|
||||
echo "---------------------------------------------------------------------"
|
||||
iptables -t filter -nvL
|
||||
echo "#####################################################################"
|
||||
echo "ip rule show"
|
||||
echo "---------------------------------------------------------------------"
|
||||
ip rule show
|
||||
echo "#####################################################################"
|
||||
echo "ip route show table int2lte"
|
||||
echo "---------------------------------------------------------------------"
|
||||
ip route show table int2lte
|
||||
echo "#####################################################################"
|
||||
echo "ip route show table main"
|
||||
echo "---------------------------------------------------------------------"
|
||||
ip route show table main
|
||||
|
||||
trap ctrl_c INT
|
||||
|
||||
echo "to see UE stats, please run : watch_ue script"
|
||||
echo "$OPENAIR_TARGETS/SIMU/USER/oaisim -b0 -M1 -p2 -g3 -l3 > /dev/null"
|
||||
nice -10 $OPENAIR_TARGETS/SIMU/USER/oaisim -b0 -M1 -p2 -g3 -l3 > /dev/null
|
||||
#gdb $OPENAIR_TARGETS/SIMU/USER/oaisim
|
||||
echo "End"
|
||||
ctrl_c
|
||||
|
||||
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
all: oaisim nasmesh
|
||||
|
||||
userclean: clean oaisim nasmesh
|
||||
|
||||
oaisim:
|
||||
(cd $(OPENAIR_TARGETS)/SIMU/USER && make LINK_ENB_PDCP_TO_IP_DRIVER=1 -j2)
|
||||
nasmesh:
|
||||
(cd $(OPENAIR2_DIR) && make nasmesh_netlink.ko)
|
||||
(cd $(OPENAIR2_DIR)/NAS/DRIVER/MESH/RB_TOOL/ && make)
|
||||
|
||||
clean:
|
||||
(cd $(OPENAIR_TARGETS)/SIMU/USER && make clean)
|
||||
|
||||
@@ -1,34 +0,0 @@
|
||||
#!/bin/sh
|
||||
echo "Bringup eNB interface"
|
||||
|
||||
sudo rmmod nasmesh
|
||||
make all
|
||||
sudo insmod $OPENAIR2_DIR/NAS/DRIVER/MESH/nasmesh.ko
|
||||
|
||||
#avoid conflict with reserved multicast addresses (224.0.0.11,224.0.0.13, 224.0.0.16)
|
||||
#sudo route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0
|
||||
sudo ip route add 239.0.0.160/28 dev eth0
|
||||
|
||||
|
||||
sudo ifconfig oai0 10.0.1.1 netmask 255.255.255.0 broadcast 10.0.1.255
|
||||
|
||||
$OPENAIR2_DIR/NAS/DRIVER/MESH/RB_TOOL/rb_tool -a -c0 -i0 -z0 -s 10.0.1.1 -t 10.0.1.2 -r 1
|
||||
$OPENAIR2_DIR/NAS/DRIVER/MESH/RB_TOOL/rb_tool -a -c1 -i0 -z0 -s 10.0.1.1 -t 10.0.1.3 -r 12
|
||||
|
||||
#xterm -T ENB -hold -e ping 10.0.1.2&
|
||||
#xterm -T ENB -hold -e ping 10.0.1.3&
|
||||
|
||||
if [ -z $1 ]; then
|
||||
echo "nice -10 $OPENAIR_TARGETS/SIMU/USER/oaisim -u0 -M0 -p3 -g3 -l3 > /dev/null"
|
||||
nice -10 $OPENAIR_TARGETS/SIMU/USER/oaisim -u0 -M0 -p3 -g3 -l3 > /dev/null
|
||||
else
|
||||
if [ $1 = "all" ]; then
|
||||
echo "nice -10 $OPENAIR_TARGETS/SIMU/USER/oaisim -u0 -M0 -p3 -g3 -l7"
|
||||
nice -10 $OPENAIR_TARGETS/SIMU/USER/oaisim -u0 -M0 -p3 -g3 -l7
|
||||
else
|
||||
echo "nice -10 $OPENAIR_TARGETS/SIMU/USER/oaisim -u0 -M0 -p3 -g3 -l7 | grep -i $1"
|
||||
nice -10 $OPENAIR_TARGETS/SIMU/USER/oaisim -u0 -M0 -p3 -g3 -l7 | grep -i $1
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "End"
|
||||
@@ -1,31 +0,0 @@
|
||||
#!/bin/sh
|
||||
echo "Bringup UE interface"
|
||||
sudo rmmod nasmesh
|
||||
make all
|
||||
sudo insmod $OPENAIR2_DIR/NAS/DRIVER/MESH/nasmesh.ko
|
||||
|
||||
#avoid conflict with reserved multicast addresses (224.0.0.11,224.0.0.13, 224.0.0.16)
|
||||
#sudo route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0
|
||||
sudo ip route add 239.0.0.160/28 dev eth0
|
||||
|
||||
|
||||
sudo ifconfig oai0 10.0.1.2 netmask 255.255.255.0 broadcast 10.0.1.255
|
||||
|
||||
$OPENAIR2_DIR/NAS/DRIVER/MESH/RB_TOOL/rb_tool -a -c0 -i0 -z0 -s 10.0.1.2 -t 10.0.1.1 -r 1
|
||||
|
||||
#xterm -T UE1 -hold -e ping 10.0.1.1&
|
||||
|
||||
if [ -z $1 ]; then
|
||||
echo "nice -10 $OPENAIR_TARGETS/SIMU/USER/oaisim -b0 -M1 -p3 -g3 -l3 > /dev/null"
|
||||
nice -10 $OPENAIR_TARGETS/SIMU/USER/oaisim -b0 -M1 -p3 -g3 -l3 > /dev/null
|
||||
else
|
||||
if [ $1 = "all" ]; then
|
||||
echo "nice -10 $OPENAIR_TARGETS/SIMU/USER/oaisim -b0 -M1 -p3 -g3 -l7"
|
||||
nice -10 $OPENAIR_TARGETS/SIMU/USER/oaisim -b0 -M1 -p3 -g3 -l7
|
||||
else
|
||||
echo "nice -10 $OPENAIR_TARGETS/SIMU/USER/oaisim -b0 -M1 -p3 -g3 -l7 | grep -i $1"
|
||||
nice -10 $OPENAIR_TARGETS/SIMU/USER/oaisim -b0 -M1 -p3 -g3 -l7 | grep -i $1
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "End"
|
||||
@@ -1,30 +0,0 @@
|
||||
#!/bin/sh
|
||||
echo "Bringup UE interface"
|
||||
sudo rmmod nasmesh
|
||||
make all
|
||||
sudo insmod $OPENAIR2_DIR/NAS/DRIVER/MESH/nasmesh.ko
|
||||
|
||||
#avoid conflict with reserved multicast addresses (224.0.0.11,224.0.0.13, 224.0.0.16)
|
||||
#sudo route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0
|
||||
sudo ip route add 239.0.0.160/28 dev eth0
|
||||
|
||||
sudo ifconfig oai0 10.0.1.3 netmask 255.255.255.0 broadcast 10.0.1.255
|
||||
|
||||
$OPENAIR2_DIR/NAS/DRIVER/MESH/RB_TOOL/rb_tool -a -c0 -i0 -z0 -s 10.0.1.3 -t 10.0.1.1 -r 1
|
||||
|
||||
#xterm -T UE2 -hold -e ping 10.0.1.1&
|
||||
|
||||
if [ -z $1 ]; then
|
||||
echo "nice -10 $OPENAIR_TARGETS/SIMU/USER/oaisim -b0 -M2 -p3 -g3 -l3 > /dev/null"
|
||||
nice -10 $OPENAIR_TARGETS/SIMU/USER/oaisim -b0 -M2 -p3 -g3 -l3 > /dev/null
|
||||
else
|
||||
if [ $1 = "all" ]; then
|
||||
echo "nice -10 $OPENAIR_TARGETS/SIMU/USER/oaisim -b0 -M2 -p3 -g3 -l7"
|
||||
nice -10 $OPENAIR_TARGETS/SIMU/USER/oaisim -b0 -M2 -p3 -g3 -l7
|
||||
else
|
||||
echo "nice -10 $OPENAIR_TARGETS/SIMU/USER/oaisim -b0 -M2 -p3 -g3 -l7 | grep -i $1"
|
||||
nice -10 $OPENAIR_TARGETS/SIMU/USER/oaisim -b0 -M2 -p3 -g3 -l7 | grep -i $1
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "End"
|
||||
@@ -1,4 +0,0 @@
|
||||
|
||||
This is the folder used by the OCG(openair config generation) to parse a xml-based scenario defined by the user in the WEBXML directory, and produce emulation results in the RESULTS directory.
|
||||
|
||||
Please make sure that you have correctly set the OPENAIR_TARGETS variables.
|
||||
@@ -1,147 +0,0 @@
|
||||
<OAI_EMULATION>
|
||||
<ENVIRONMENT_SYSTEM_CONFIG>
|
||||
<FADING>
|
||||
<LARGE_SCALE>urban</LARGE_SCALE> <!-- OPTIONS: urban, rural, indoor -->
|
||||
<FREE_SPACE_MODEL_PARAMETERS>
|
||||
<PATHLOSS_EXPONENT>2.0</PATHLOSS_EXPONENT> <!-- OPTIONS: >1 -->
|
||||
<PATHLOSS_0_dB>-50</PATHLOSS_0_dB>
|
||||
</FREE_SPACE_MODEL_PARAMETERS>
|
||||
<SMALL_SCALE>Rayleigh1</SMALL_SCALE> <!-- OPTIONS: SCM_A, SCM_B, SCM_C, SCM_D, EPA, EVA, ETU, Rayleigh8, Rayleigh1, Rayleigh1_corr, Rayleigh1_anticorr, Rice8, Rice1, Rice1_corr, Rice1_anticorr, AWGN -->
|
||||
</FADING>
|
||||
<WALL_PENETRATION_LOSS_dB>5</WALL_PENETRATION_LOSS_dB>
|
||||
<SYSTEM_BANDWIDTH_MB>7.68</SYSTEM_BANDWIDTH_MB>
|
||||
<SYSTEM_FREQUENCY_GHz>1.9</SYSTEM_FREQUENCY_GHz>
|
||||
<ANTENNA>
|
||||
<eNB_ANTENNA>
|
||||
<RX_NOISE_LEVEL_dB>5</RX_NOISE_LEVEL_dB>
|
||||
<NUMBER_OF_SECTORS>3</NUMBER_OF_SECTORS>
|
||||
<BEAM_WIDTH_dB>1.13</BEAM_WIDTH_dB>
|
||||
<ANTENNA_GAIN_dBi>16</ANTENNA_GAIN_dBi>
|
||||
<TX_POWER_dBm>40</TX_POWER_dBm>
|
||||
</eNB_ANTENNA>
|
||||
<UE_ANTENNA>
|
||||
<RX_NOISE_LEVEL_dB>1</RX_NOISE_LEVEL_dB>
|
||||
<ANTENNA_GAIN_dBi>5</ANTENNA_GAIN_dBi>
|
||||
<TX_POWER_dBm>20</TX_POWER_dBm>
|
||||
</UE_ANTENNA>
|
||||
</ANTENNA>
|
||||
</ENVIRONMENT_SYSTEM_CONFIG>
|
||||
|
||||
<TOPOLOGY_CONFIG>
|
||||
<AREA>
|
||||
<X_km>1</X_km>
|
||||
<Y_km>1</Y_km>
|
||||
</AREA>
|
||||
<NETWORK_TYPE>homogeneous</NETWORK_TYPE> <!-- OPTIONS: homogeneous, heterogeneous -->
|
||||
<CELL_TYPE>macrocell</CELL_TYPE> <!-- OPTIONS: macrocell, microcell, picocell, femtocell -->
|
||||
<RELAY></RELAY>
|
||||
<MOBILITY>
|
||||
<UE_MOBILITY>
|
||||
<UE_INITIAL_DISTRIBUTION>random</UE_INITIAL_DISTRIBUTION> <!-- OPTIONS: random, concentrated, grid -->
|
||||
<RANDOM_UE_DISTRIBUTION>
|
||||
<NUMBER_OF_NODES>1</NUMBER_OF_NODES>
|
||||
</RANDOM_UE_DISTRIBUTION>
|
||||
<UE_MOBILITY_TYPE>fixed</UE_MOBILITY_TYPE> <!-- OPTIONS: fixed, random_waypoint, random_walk, grid_walk, trace, sumo -->
|
||||
<UE_MOVING_DYNAMICS>
|
||||
<MIN_SPEED_mps>1</MIN_SPEED_mps>
|
||||
<MAX_SPEED_mps>200</MAX_SPEED_mps>
|
||||
<MIN_SLEEP_ms>0.1</MIN_SLEEP_ms>
|
||||
<MAX_SLEEP_ms>5.0</MAX_SLEEP_ms>
|
||||
<MIN_JOURNEY_TIME_ms>0.1</MIN_JOURNEY_TIME_ms>
|
||||
<MAX_JOURNEY_TIME_ms>10</MAX_JOURNEY_TIME_ms>
|
||||
</UE_MOVING_DYNAMICS>
|
||||
<SUMO_CONFIG> <!-- Simulation for Urban Mobility -->
|
||||
<SUMO_CMD> sumo-gui </SUMO_CMD>
|
||||
<SUMO_CONFIG_FILE>$OPENAIR2_DIR/UTIL/OMG/SUMO/SCENARIOS/scen.sumo.cfg</SUMO_CONFIG_FILE>
|
||||
<SUMO_START> 0 </SUMO_START>
|
||||
<SUMO_END> 10 </SUMO_END>
|
||||
<SUMO_STEP> 10</SUMO_STEP>
|
||||
<SUMO_HOST_IP> 127.0.1.1</SUMO_HOST_IP>
|
||||
<SUMO_HOST_PORT> 8883</SUMO_HOST_PORT>
|
||||
</SUMO_CONFIG>
|
||||
</UE_MOBILITY>
|
||||
<eNB_MOBILITY>
|
||||
<eNB_INITIAL_DISTRIBUTION>random</eNB_INITIAL_DISTRIBUTION> <!-- OPTIONS: random, hexagonal, grid -->
|
||||
<RANDOM_eNB_DISTRIBUTION>
|
||||
<NUMBER_OF_CELLS>1</NUMBER_OF_CELLS>
|
||||
</RANDOM_eNB_DISTRIBUTION>
|
||||
|
||||
<eNB_MOBILITY_TYPE>fixed</eNB_MOBILITY_TYPE> <!-- OPTIONS: fixed, mobile -->
|
||||
</eNB_MOBILITY>
|
||||
</MOBILITY>
|
||||
</TOPOLOGY_CONFIG>
|
||||
|
||||
<APPLICATION_CONFIG>
|
||||
<PREDEFINED_TRAFFIC>
|
||||
<SOURCE_ID>0</SOURCE_ID>
|
||||
<APPLICATION_TYPE>gaming_OA</APPLICATION_TYPE> <!-- OPTIONS: scbr, mcbr, bcbr, m2m_AP, m2m_BR, gaming_OA, gaming_TF, full_buffer -->
|
||||
<DESTINATION_ID>1</DESTINATION_ID>
|
||||
<FLOW_START_ms>400</FLOW_START_ms> <!-- not less than 310 -->
|
||||
<FLOW_DURATION_ms>2000</FLOW_DURATION_ms> <!-- less than simu time - FLOW_START_ms -->
|
||||
|
||||
</PREDEFINED_TRAFFIC>
|
||||
|
||||
<CUSTOMIZED_TRAFFIC>
|
||||
<PU> <!-- we are generating only one packet -->
|
||||
<PROB_OFF_PU>0.9</PROB_OFF_PU> <!-- prob to transit from off to PU -->
|
||||
<PROB_PU_ED>0.1</PROB_PU_ED> <!-- prob to transit from PU to ED -->
|
||||
<HOLDING_TIME_OFF_PU>100</HOLDING_TIME_OFF_PU> <!-- in off state -->
|
||||
</PU>
|
||||
<ED> <!-- we are generating only one packet -->
|
||||
<PROB_OFF_ED>0.1</PROB_OFF_ED> <!-- prob to transit from off to PU -->
|
||||
<PROB_ED_PE>0.1</PROB_ED_PE> <!-- prob to transit from off to PU -->
|
||||
<HOLDING_TIME_OFF_ED>10000</HOLDING_TIME_OFF_ED> <!-- in off state -->
|
||||
</ED>
|
||||
<PE>
|
||||
<HOLDING_TIME_OFF_PE>100</HOLDING_TIME_OFF_PE> <!-- in off state, how much time we should generate traffic -->
|
||||
</PE>
|
||||
<SOURCE_ID>2</SOURCE_ID> <!-- <SOURCE_ID> 1:100 </SOURCE_ID> -->
|
||||
<TRANSPORT_PROTOCOL>udp</TRANSPORT_PROTOCOL> <!-- OPTIONS: tcp (default), udp -->
|
||||
<IP_VERSION>ipv6</IP_VERSION> <!-- OPTIONS: ipv4 (default), ipv6 -->
|
||||
<DESTINATION_ID>0</DESTINATION_ID>
|
||||
<FLOW_START_ms>400</FLOW_START_ms> <!-- not less than 310 -->
|
||||
<FLOW_DURATION_ms>2000</FLOW_DURATION_ms> <!-- less than simu time - FLOW_START_ms -->
|
||||
|
||||
<IDT_DIST>uniform</IDT_DIST> <!-- OPTIONS: no_customized_traffic (default), uniform, poission, gaussian, exponential, fixed, weibull, pareto, gamma, cauchy -->
|
||||
<IDT_MIN_ms>100</IDT_MIN_ms>
|
||||
<IDT_MAX_ms>1000</IDT_MAX_ms>
|
||||
<IDT_STANDARD_DEVIATION>1</IDT_STANDARD_DEVIATION>
|
||||
<IDT_LAMBDA>7</IDT_LAMBDA>
|
||||
|
||||
<SIZE_DIST>gaussian</SIZE_DIST> <!-- OPTIONS: no_customized_traffic (default), uniform, poission, gaussian, exponential, fixed, weibull, pareto, gamma, cauchy -->
|
||||
<SIZE_MIN_byte>200</SIZE_MIN_byte>
|
||||
<SIZE_MAX_byte>500</SIZE_MAX_byte>
|
||||
<SIZE_STANDARD_DEVIATION>5</SIZE_STANDARD_DEVIATION>
|
||||
<SIZE_LAMBDA>4</SIZE_LAMBDA>
|
||||
|
||||
|
||||
<DESTINATION_PORT>8080</DESTINATION_PORT>
|
||||
</CUSTOMIZED_TRAFFIC>
|
||||
|
||||
</APPLICATION_CONFIG>
|
||||
|
||||
<EMULATION_CONFIG>
|
||||
<EMULATION_TIME_ms>5000</EMULATION_TIME_ms>
|
||||
|
||||
<PERFORMANCE>
|
||||
<METRICS>
|
||||
<THROUGHPUT>enable</THROUGHPUT>
|
||||
<LATENCY>disable</LATENCY>
|
||||
</METRICS>
|
||||
|
||||
<LAYER>
|
||||
<MAC>1</MAC>
|
||||
<RLC></RLC>
|
||||
<PDCP></PDCP>
|
||||
</LAYER>
|
||||
|
||||
<LOG_EMU>
|
||||
<DEBUG>1</DEBUG>
|
||||
</LOG_EMU>
|
||||
<SEED>
|
||||
<SEED_VALUE>1</SEED_VALUE>
|
||||
</SEED>
|
||||
</PERFORMANCE>
|
||||
</EMULATION_CONFIG>
|
||||
<PROFILE>EURECOM</PROFILE>
|
||||
</OAI_EMULATION>
|
||||
@@ -1,12 +0,0 @@
|
||||
|
||||
<OAI_EMULATION>
|
||||
|
||||
<EMULATION_CONFIG>
|
||||
<EMULATION_TIME_ms>500</EMULATION_TIME_ms>
|
||||
<LOG> <!-- set the global log level -->
|
||||
<LEVEL>debug</LEVEL>
|
||||
</LOG>
|
||||
</EMULATION_CONFIG>
|
||||
<PROFILE>EMU-TEST</PROFILE>
|
||||
|
||||
</OAI_EMULATION>
|
||||
@@ -1,77 +0,0 @@
|
||||
<OAI_EMULATION>
|
||||
<TOPOLOGY_CONFIG>
|
||||
<AREA>
|
||||
<X_m>5000</X_m>
|
||||
<Y_m>5000</Y_m>
|
||||
</AREA>
|
||||
<MOBILITY>
|
||||
<UE_MOBILITY>
|
||||
<RANDOM_UE_DISTRIBUTION>
|
||||
<NUMBER_OF_NODES>3</NUMBER_OF_NODES>
|
||||
</RANDOM_UE_DISTRIBUTION>
|
||||
<UE_MOBILITY_TYPE>STATIC</UE_MOBILITY_TYPE>
|
||||
</UE_MOBILITY>
|
||||
<eNB_MOBILITY>
|
||||
<eNB_INITIAL_DISTRIBUTION>random</eNB_INITIAL_DISTRIBUTION>
|
||||
<RANDOM_eNB_DISTRIBUTION>
|
||||
<NUMBER_OF_CELLS>1</NUMBER_OF_CELLS>
|
||||
</RANDOM_eNB_DISTRIBUTION>
|
||||
<eNB_MOBILITY_TYPE>STATIC</eNB_MOBILITY_TYPE>
|
||||
</eNB_MOBILITY>
|
||||
</MOBILITY>
|
||||
</TOPOLOGY_CONFIG>
|
||||
|
||||
<APPLICATION_CONFIG>
|
||||
<PREDEFINED_TRAFFIC>
|
||||
<SOURCE_ID>0</SOURCE_ID>
|
||||
<APPLICATION_TYPE>random</APPLICATION_TYPE> <!-- OPTIONS: scbr,mcbr,bcbr, gaming_OA, gaming_TF, m2m_AP, m2m_BR, , random, ,full_buffer -->
|
||||
<DESTINATION_ID>1:3</DESTINATION_ID>
|
||||
</PREDEFINED_TRAFFIC>
|
||||
|
||||
<CUSTOMIZED_TRAFFIC>
|
||||
<SOURCE_ID>1:2</SOURCE_ID> <!-- <SOURCE_ID> 1:100 </SOURCE_ID> -->
|
||||
<TRANSPORT_PROTOCOL>udp</TRANSPORT_PROTOCOL> <!-- OPTIONS: tcp (default), udp -->
|
||||
<IP_VERSION>ipv6</IP_VERSION> <!-- OPTIONS: ipv4 (default), ipv6 -->
|
||||
<DESTINATION_ID>0</DESTINATION_ID>
|
||||
<!-- available distributions: none (default), uniform, poission, gaussian, exponential,pareto, cauchy,fixed, weibull, gamma,-->
|
||||
<IDT_DIST>poisson</IDT_DIST> <!-- similar for exponential, -->
|
||||
<IDT_LAMBDA>7.3</IDT_LAMBDA>
|
||||
|
||||
<SIZE_DIST>unifrom</SIZE_DIST> <!-- OPTIONS: no_transmission (default), uniform, poission, gaussian, exponential,pareto, cauchy,fixed, weibull, gamma,-->
|
||||
<SIZE_MIN_byte>100</SIZE_MIN_byte>
|
||||
<SIZE_MAX_byte>500</SIZE_MAX_byte>
|
||||
|
||||
</CUSTOMIZED_TRAFFIC>
|
||||
|
||||
<CUSTOMIZED_TRAFFIC>
|
||||
<SOURCE_ID>3</SOURCE_ID> <!-- <SOURCE_ID> 1:100 </SOURCE_ID> -->
|
||||
<TRANSPORT_PROTOCOL>tcp</TRANSPORT_PROTOCOL> <!-- OPTIONS: tcp (default), udp -->
|
||||
<IP_VERSION>ipv4</IP_VERSION> <!-- OPTIONS: ipv4 (default), ipv6 -->
|
||||
<DESTINATION_ID>0</DESTINATION_ID>
|
||||
<!-- available distributions: none (default), uniform, poission, gaussian, exponential,pareto, cauchy,fixed, weibull, gamma,-->
|
||||
<IDT_DIST>fixed</IDT_DIST> <!---->
|
||||
<IDT_MIN_ms>100</IDT_MIN_ms>
|
||||
|
||||
<SIZE_DIST>exponential</SIZE_DIST> <!-- OPTIONS: no_transmission (default), uniform, poission, gaussian, exponential,pareto, cauchy,fixed, weibull, gamma,-->
|
||||
<SIZE_LAMBDA>2.2</SIZE_LAMBDA>
|
||||
|
||||
</CUSTOMIZED_TRAFFIC>
|
||||
|
||||
</APPLICATION_CONFIG>
|
||||
|
||||
<EMULATION_CONFIG>
|
||||
<EMULATION_TIME_ms>0</EMULATION_TIME_ms> <!--set to infinity-->
|
||||
|
||||
<PERFORMANCE_METRICS>
|
||||
<THROUGHPUT>1</THROUGHPUT>
|
||||
</PERFORMANCE_METRICS>
|
||||
<LOG> <!-- set the global log level -->
|
||||
<LEVEL>info</LEVEL>
|
||||
<INTERVAL>1</INTERVAL>
|
||||
</LOG>
|
||||
<SEED_VALUE>1234</SEED_VALUE> <!-- value 0 means randomly generated by OAI -->
|
||||
|
||||
</EMULATION_CONFIG>
|
||||
|
||||
<PROFILE>OTG_3</PROFILE>
|
||||
</OAI_EMULATION>
|
||||
@@ -1,123 +0,0 @@
|
||||
<OAI_EMULATION>
|
||||
<ENVIRONMENT_SYSTEM_CONFIG>
|
||||
<FADING>
|
||||
<LARGE_SCALE>urban</LARGE_SCALE>
|
||||
<FREE_SPACE_MODEL_PARAMETERS>
|
||||
<PATHLOSS_EXPONENT>2.0</PATHLOSS_EXPONENT>
|
||||
<PATHLOSS_0_dB>-50</PATHLOSS_0_dB>
|
||||
</FREE_SPACE_MODEL_PARAMETERS>
|
||||
<SMALL_SCALE>Rayleigh1</SMALL_SCALE>
|
||||
</FADING>
|
||||
<WALL_PENETRATION_LOSS_dB>5</WALL_PENETRATION_LOSS_dB>
|
||||
<SYSTEM_BANDWIDTH_MB>7.68</SYSTEM_BANDWIDTH_MB>
|
||||
<SYSTEM_FREQUENCY_GHz>1.9</SYSTEM_FREQUENCY_GHz>
|
||||
<ANTENNA>
|
||||
<eNB_ANTENNA>
|
||||
<RX_NOISE_LEVEL_dB>5</RX_NOISE_LEVEL_dB>
|
||||
<NUMBER_OF_SECTORS>3</NUMBER_OF_SECTORS>
|
||||
<BEAM_WIDTH_dB>1.13</BEAM_WIDTH_dB>
|
||||
<ANTENNA_GAIN_dBi>16</ANTENNA_GAIN_dBi>
|
||||
<TX_POWER_dBm>40</TX_POWER_dBm>
|
||||
</eNB_ANTENNA>
|
||||
<UE_ANTENNA>
|
||||
<RX_NOISE_LEVEL_dB>1</RX_NOISE_LEVEL_dB>
|
||||
<ANTENNA_GAIN_dBi>5</ANTENNA_GAIN_dBi>
|
||||
<TX_POWER_dBm>20</TX_POWER_dBm>
|
||||
</UE_ANTENNA>
|
||||
</ANTENNA>
|
||||
</ENVIRONMENT_SYSTEM_CONFIG>
|
||||
|
||||
<TOPOLOGY_CONFIG>
|
||||
<AREA>
|
||||
<X_m>5000</X_m>
|
||||
<Y_m>5000</Y_m>
|
||||
</AREA>
|
||||
<NETWORK_TYPE>homogeneous</NETWORK_TYPE>
|
||||
<CELL_TYPE>macrocell</CELL_TYPE>
|
||||
<RELAY></RELAY>
|
||||
<MOBILITY>
|
||||
<UE_MOBILITY>
|
||||
<UE_INITIAL_DISTRIBUTION>random</UE_INITIAL_DISTRIBUTION>
|
||||
<RANDOM_UE_DISTRIBUTION>
|
||||
<NUMBER_OF_NODES>1</NUMBER_OF_NODES>
|
||||
</RANDOM_UE_DISTRIBUTION>
|
||||
<UE_MOBILITY_TYPE>STATIC</UE_MOBILITY_TYPE>
|
||||
<UE_MOVING_DYNAMICS>
|
||||
<MIN_SPEED_mps>1</MIN_SPEED_mps>
|
||||
<MAX_SPEED_mps>200</MAX_SPEED_mps>
|
||||
<MIN_SLEEP_ms>0.1</MIN_SLEEP_ms>
|
||||
<MAX_SLEEP_ms>5.0</MAX_SLEEP_ms>
|
||||
<MIN_JOURNEY_TIME_ms>0.1</MIN_JOURNEY_TIME_ms>
|
||||
<MAX_JOURNEY_TIME_ms>10</MAX_JOURNEY_TIME_ms>
|
||||
</UE_MOVING_DYNAMICS>
|
||||
<SUMO_CONFIG>
|
||||
<SUMO_CMD> sumo-gui </SUMO_CMD>
|
||||
<SUMO_CONFIG_FILE>$OPENAIR2_DIR/UTIL/OMG/SUMO/SCENARIOS/scen.sumo.cfg</SUMO_CONFIG_FILE>
|
||||
<SUMO_START> 0 </SUMO_START>
|
||||
<SUMO_END> 10 </SUMO_END>
|
||||
<SUMO_STEP> 10</SUMO_STEP>
|
||||
<SUMO_HOST_IP> 127.0.1.1</SUMO_HOST_IP>
|
||||
<SUMO_HOST_PORT> 8883</SUMO_HOST_PORT>
|
||||
</SUMO_CONFIG>
|
||||
</UE_MOBILITY>
|
||||
<eNB_MOBILITY>
|
||||
<eNB_INITIAL_DISTRIBUTION>random</eNB_INITIAL_DISTRIBUTION>
|
||||
<RANDOM_eNB_DISTRIBUTION>
|
||||
<NUMBER_OF_CELLS>1</NUMBER_OF_CELLS>
|
||||
</RANDOM_eNB_DISTRIBUTION>
|
||||
<eNB_MOBILITY_TYPE>STATIC</eNB_MOBILITY_TYPE>
|
||||
</eNB_MOBILITY>
|
||||
</MOBILITY>
|
||||
</TOPOLOGY_CONFIG>
|
||||
|
||||
<APPLICATION_CONFIG>
|
||||
<PREDEFINED_TRAFFIC>
|
||||
<SOURCE_ID>1</SOURCE_ID>
|
||||
<APPLICATION_TYPE>mcbr</APPLICATION_TYPE> <!-- OPTIONS: scbr,mcbr,bcbr, gaming_OA, gaming_TF, m2m_AP, m2m_BR, , random, ,full_buffer -->
|
||||
<DESTINATION_ID>0</DESTINATION_ID>
|
||||
</PREDEFINED_TRAFFIC>
|
||||
|
||||
<CUSTOMIZED_TRAFFIC>
|
||||
<SOURCE_ID>0</SOURCE_ID> <!-- <SOURCE_ID> 1:100 </SOURCE_ID> -->
|
||||
<TRANSPORT_PROTOCOL>udp</TRANSPORT_PROTOCOL> <!-- OPTIONS: tcp (default), udp -->
|
||||
<IP_VERSION>ipv6</IP_VERSION> <!-- OPTIONS: ipv4 (default), ipv6 -->
|
||||
<DESTINATION_ID>1</DESTINATION_ID>
|
||||
|
||||
<IDT_DIST>poisson</IDT_DIST> <!-- OPTIONS: no_transmission (default), uniform, poission, gaussian, exponential -->
|
||||
<IDT_MIN_ms>100</IDT_MIN_ms>
|
||||
<IDT_MAX_ms>1000</IDT_MAX_ms>
|
||||
<IDT_STANDARD_DEVIATION>4.5</IDT_STANDARD_DEVIATION>
|
||||
<IDT_LAMBDA>7.3</IDT_LAMBDA>
|
||||
<IDT_SCALE>30</IDT_SCALE>
|
||||
<IDT_SHAPE>15</IDT_SHAPE>
|
||||
|
||||
<SIZE_DIST>uniform</SIZE_DIST>
|
||||
<SIZE_MIN_byte>100</SIZE_MIN_byte>
|
||||
<SIZE_MAX_byte>500</SIZE_MAX_byte>
|
||||
<SIZE_STANDARD_DEVIATION>5.3</SIZE_STANDARD_DEVIATION>
|
||||
<SIZE_LAMBDA>2.2</SIZE_LAMBDA>
|
||||
<SIZE_SCALE>0.5</SIZE_SCALE>
|
||||
<SIZE_SHAPE>30</SIZE_SHAPE>
|
||||
|
||||
</CUSTOMIZED_TRAFFIC>
|
||||
|
||||
</APPLICATION_CONFIG>
|
||||
|
||||
<EMULATION_CONFIG>
|
||||
<EMULATION_TIME_ms>0</EMULATION_TIME_ms> <!--set to infinity-->
|
||||
|
||||
<PERFORMANCE_METRICS>
|
||||
<THROUGHPUT>enable</THROUGHPUT>
|
||||
<LATENCY>enable</LATENCY> <!-- include both OWD and RTT-->
|
||||
<LOSS_RATE>enable</LOSS_RATE>
|
||||
</PERFORMANCE_METRICS>
|
||||
<LOG> <!-- set the global log level -->
|
||||
<LEVEL>warning</LEVEL>
|
||||
<INTERVAL>1</INTERVAL>
|
||||
</LOG>
|
||||
<SEED_VALUE>1234</SEED_VALUE> <!-- value 0 means randomly generated by OAI -->
|
||||
|
||||
</EMULATION_CONFIG>
|
||||
|
||||
<PROFILE>OCM_OMG_OTG_1</PROFILE>
|
||||
</OAI_EMULATION>
|
||||
@@ -1,106 +0,0 @@
|
||||
<OAI_EMULATION>
|
||||
<ENVIRONMENT_SYSTEM_CONFIG>
|
||||
<FADING>
|
||||
<LARGE_SCALE>urban</LARGE_SCALE>
|
||||
<FREE_SPACE_MODEL_PARAMETERS>
|
||||
<PATHLOSS_EXPONENT>2</PATHLOSS_EXPONENT>
|
||||
<PATHLOSS_0_dB>-100</PATHLOSS_0_dB><!--pathloss at 1km -->
|
||||
</FREE_SPACE_MODEL_PARAMETERS>
|
||||
<SMALL_SCALE>AWGN</SMALL_SCALE>
|
||||
</FADING>
|
||||
<WALL_PENETRATION_LOSS_dB>5</WALL_PENETRATION_LOSS_dB>
|
||||
<SYSTEM_BANDWIDTH_MB>7.68</SYSTEM_BANDWIDTH_MB>
|
||||
<SYSTEM_FREQUENCY_GHz>1.9</SYSTEM_FREQUENCY_GHz>
|
||||
<ANTENNA>
|
||||
<eNB_ANTENNA>
|
||||
<RX_NOISE_LEVEL_dB>5</RX_NOISE_LEVEL_dB>
|
||||
<NUMBER_OF_SECTORS>1</NUMBER_OF_SECTORS>
|
||||
<BEAM_WIDTH_dB>1.13</BEAM_WIDTH_dB>
|
||||
<ANTENNA_GAIN_dBi>16</ANTENNA_GAIN_dBi>
|
||||
<TX_POWER_dBm>40</TX_POWER_dBm>
|
||||
</eNB_ANTENNA>
|
||||
<UE_ANTENNA>
|
||||
<RX_NOISE_LEVEL_dB>1</RX_NOISE_LEVEL_dB>
|
||||
<ANTENNA_GAIN_dBi>5</ANTENNA_GAIN_dBi>
|
||||
<TX_POWER_dBm>20</TX_POWER_dBm>
|
||||
</UE_ANTENNA>
|
||||
</ANTENNA>
|
||||
</ENVIRONMENT_SYSTEM_CONFIG>
|
||||
|
||||
<TOPOLOGY_CONFIG>
|
||||
<AREA>
|
||||
<X_m>2000</X_m>
|
||||
<Y_m>2000</Y_m>
|
||||
</AREA>
|
||||
<MOBILITY>
|
||||
<UE_MOBILITY>
|
||||
<RANDOM_UE_DISTRIBUTION>
|
||||
<NUMBER_OF_NODES>1</NUMBER_OF_NODES>
|
||||
</RANDOM_UE_DISTRIBUTION>
|
||||
<UE_MOBILITY_TYPE>STATIC</UE_MOBILITY_TYPE>
|
||||
</UE_MOBILITY>
|
||||
<eNB_MOBILITY>
|
||||
<eNB_INITIAL_DISTRIBUTION>random</eNB_INITIAL_DISTRIBUTION>
|
||||
<RANDOM_eNB_DISTRIBUTION>
|
||||
<NUMBER_OF_CELLS>1</NUMBER_OF_CELLS>
|
||||
</RANDOM_eNB_DISTRIBUTION>
|
||||
<eNB_MOBILITY_TYPE>STATIC</eNB_MOBILITY_TYPE>
|
||||
</eNB_MOBILITY>
|
||||
</MOBILITY>
|
||||
</TOPOLOGY_CONFIG>
|
||||
|
||||
<APPLICATION_CONFIG>
|
||||
|
||||
<PREDEFINED_TRAFFIC>
|
||||
<SOURCE_ID>0</SOURCE_ID>
|
||||
<APPLICATION_TYPE>scbr</APPLICATION_TYPE>
|
||||
<DESTINATION_ID>1</DESTINATION_ID>
|
||||
<FLOW_START_ms>100</FLOW_START_ms>
|
||||
<FLOW_DURATION_ms>55000</FLOW_DURATION_ms>
|
||||
</PREDEFINED_TRAFFIC>
|
||||
|
||||
<!-- UL -->
|
||||
<!-- <PREDEFINED_TRAFFIC>
|
||||
<SOURCE_ID>1</SOURCE_ID>
|
||||
<FLOW_START_ms>200</FLOW_START_ms>
|
||||
<FLOW_DURATION_ms>600</FLOW_DURATION_ms>
|
||||
<APPLICATION_TYPE>scbr</APPLICATION_TYPE>
|
||||
<DESTINATION_ID>0</DESTINATION_ID>
|
||||
</PREDEFINED_TRAFFIC>
|
||||
-->
|
||||
<CUSTOMIZED_TRAFFIC>
|
||||
<SOURCE_ID>1</SOURCE_ID>
|
||||
<TRANSPORT_PROTOCOL>udp</TRANSPORT_PROTOCOL>
|
||||
<FLOW_START_ms>100</FLOW_START_ms>
|
||||
<FLOW_DURATION_ms>55000</FLOW_DURATION_ms>
|
||||
<IP_VERSION>ipv4</IP_VERSION>
|
||||
<DESTINATION_ID>0</DESTINATION_ID>
|
||||
<IDT_DIST>uniform</IDT_DIST>
|
||||
<IDT_MIN_ms>1</IDT_MIN_ms>
|
||||
<IDT_MAX_ms>10</IDT_MAX_ms>
|
||||
<SIZE_DIST>uniform</SIZE_DIST>
|
||||
<SIZE_MIN_byte>10</SIZE_MIN_byte>
|
||||
<SIZE_MAX_byte>100</SIZE_MAX_byte>
|
||||
</CUSTOMIZED_TRAFFIC>
|
||||
|
||||
</APPLICATION_CONFIG>
|
||||
|
||||
<EMULATION_CONFIG>
|
||||
<EMULATION_TIME_ms>60000</EMULATION_TIME_ms>
|
||||
<CURVE>disable</CURVE>
|
||||
<PERFORMANCE_METRICS>
|
||||
<THROUGHPUT>enable</THROUGHPUT>
|
||||
<LATENCY>enable</LATENCY>
|
||||
<LOSS_RATE>enable</LOSS_RATE>
|
||||
</PERFORMANCE_METRICS>
|
||||
<LOG> <!-- set the global log level -->
|
||||
<LEVEL>info</LEVEL>
|
||||
<VERBOSITY>low</VERBOSITY>
|
||||
</LOG>
|
||||
<SEED_VALUE>2013</SEED_VALUE> <!-- value 0 means randomly generated by OAI -->
|
||||
|
||||
</EMULATION_CONFIG>
|
||||
|
||||
<PROFILE>CBA_1</PROFILE>
|
||||
|
||||
</OAI_EMULATION>
|
||||
@@ -1,106 +0,0 @@
|
||||
<OAI_EMULATION>
|
||||
<ENVIRONMENT_SYSTEM_CONFIG>
|
||||
<FADING>
|
||||
<LARGE_SCALE>urban</LARGE_SCALE>
|
||||
<FREE_SPACE_MODEL_PARAMETERS>
|
||||
<PATHLOSS_EXPONENT>2</PATHLOSS_EXPONENT>
|
||||
<PATHLOSS_0_dB>-100</PATHLOSS_0_dB><!--pathloss at 1km -->
|
||||
</FREE_SPACE_MODEL_PARAMETERS>
|
||||
<SMALL_SCALE>AWGN</SMALL_SCALE>
|
||||
</FADING>
|
||||
<WALL_PENETRATION_LOSS_dB>5</WALL_PENETRATION_LOSS_dB>
|
||||
<SYSTEM_BANDWIDTH_MB>7.68</SYSTEM_BANDWIDTH_MB>
|
||||
<SYSTEM_FREQUENCY_GHz>1.9</SYSTEM_FREQUENCY_GHz>
|
||||
<ANTENNA>
|
||||
<eNB_ANTENNA>
|
||||
<RX_NOISE_LEVEL_dB>5</RX_NOISE_LEVEL_dB>
|
||||
<NUMBER_OF_SECTORS>1</NUMBER_OF_SECTORS>
|
||||
<BEAM_WIDTH_dB>1.13</BEAM_WIDTH_dB>
|
||||
<ANTENNA_GAIN_dBi>16</ANTENNA_GAIN_dBi>
|
||||
<TX_POWER_dBm>40</TX_POWER_dBm>
|
||||
</eNB_ANTENNA>
|
||||
<UE_ANTENNA>
|
||||
<RX_NOISE_LEVEL_dB>1</RX_NOISE_LEVEL_dB>
|
||||
<ANTENNA_GAIN_dBi>5</ANTENNA_GAIN_dBi>
|
||||
<TX_POWER_dBm>20</TX_POWER_dBm>
|
||||
</UE_ANTENNA>
|
||||
</ANTENNA>
|
||||
</ENVIRONMENT_SYSTEM_CONFIG>
|
||||
|
||||
<TOPOLOGY_CONFIG>
|
||||
<AREA>
|
||||
<X_m>2000</X_m>
|
||||
<Y_m>2000</Y_m>
|
||||
</AREA>
|
||||
<MOBILITY>
|
||||
<UE_MOBILITY>
|
||||
<RANDOM_UE_DISTRIBUTION>
|
||||
<NUMBER_OF_NODES>1</NUMBER_OF_NODES>
|
||||
</RANDOM_UE_DISTRIBUTION>
|
||||
<UE_MOBILITY_TYPE>STATIC</UE_MOBILITY_TYPE>
|
||||
</UE_MOBILITY>
|
||||
<eNB_MOBILITY>
|
||||
<eNB_INITIAL_DISTRIBUTION>random</eNB_INITIAL_DISTRIBUTION>
|
||||
<RANDOM_eNB_DISTRIBUTION>
|
||||
<NUMBER_OF_CELLS>1</NUMBER_OF_CELLS>
|
||||
</RANDOM_eNB_DISTRIBUTION>
|
||||
<eNB_MOBILITY_TYPE>STATIC</eNB_MOBILITY_TYPE>
|
||||
</eNB_MOBILITY>
|
||||
</MOBILITY>
|
||||
</TOPOLOGY_CONFIG>
|
||||
|
||||
<APPLICATION_CONFIG>
|
||||
|
||||
<PREDEFINED_TRAFFIC>
|
||||
<SOURCE_ID>0</SOURCE_ID>
|
||||
<APPLICATION_TYPE>scbr</APPLICATION_TYPE>
|
||||
<DESTINATION_ID>1</DESTINATION_ID>
|
||||
<FLOW_START_ms>100</FLOW_START_ms>
|
||||
<FLOW_DURATION_ms>55000</FLOW_DURATION_ms>
|
||||
</PREDEFINED_TRAFFIC>
|
||||
|
||||
<!-- UL -->
|
||||
<!-- <PREDEFINED_TRAFFIC>
|
||||
<SOURCE_ID>1</SOURCE_ID>
|
||||
<FLOW_START_ms>200</FLOW_START_ms>
|
||||
<FLOW_DURATION_ms>600</FLOW_DURATION_ms>
|
||||
<APPLICATION_TYPE>scbr</APPLICATION_TYPE>
|
||||
<DESTINATION_ID>0</DESTINATION_ID>
|
||||
</PREDEFINED_TRAFFIC>
|
||||
-->
|
||||
<CUSTOMIZED_TRAFFIC>
|
||||
<SOURCE_ID>1</SOURCE_ID>
|
||||
<TRANSPORT_PROTOCOL>udp</TRANSPORT_PROTOCOL>
|
||||
<FLOW_START_ms>100</FLOW_START_ms>
|
||||
<FLOW_DURATION_ms>55000</FLOW_DURATION_ms>
|
||||
<IP_VERSION>ipv4</IP_VERSION>
|
||||
<DESTINATION_ID>0</DESTINATION_ID>
|
||||
<IDT_DIST>uniform</IDT_DIST>
|
||||
<IDT_MIN_ms>1</IDT_MIN_ms>
|
||||
<IDT_MAX_ms>10</IDT_MAX_ms>
|
||||
<SIZE_DIST>uniform</SIZE_DIST>
|
||||
<SIZE_MIN_byte>100</SIZE_MIN_byte>
|
||||
<SIZE_MAX_byte>500</SIZE_MAX_byte>
|
||||
</CUSTOMIZED_TRAFFIC>
|
||||
|
||||
</APPLICATION_CONFIG>
|
||||
|
||||
<EMULATION_CONFIG>
|
||||
<EMULATION_TIME_ms>60000</EMULATION_TIME_ms>
|
||||
<CURVE>disable</CURVE>
|
||||
<PERFORMANCE_METRICS>
|
||||
<THROUGHPUT>enable</THROUGHPUT>
|
||||
<LATENCY>enable</LATENCY>
|
||||
<LOSS_RATE>enable</LOSS_RATE>
|
||||
</PERFORMANCE_METRICS>
|
||||
<LOG> <!-- set the global log level -->
|
||||
<LEVEL>info</LEVEL>
|
||||
<VERBOSITY>low</VERBOSITY>
|
||||
</LOG>
|
||||
<SEED_VALUE>2013</SEED_VALUE> <!-- value 0 means randomly generated by OAI -->
|
||||
|
||||
</EMULATION_CONFIG>
|
||||
|
||||
<PROFILE>CBA_1</PROFILE>
|
||||
|
||||
</OAI_EMULATION>
|
||||
@@ -1,105 +0,0 @@
|
||||
<OAI_EMULATION>
|
||||
<ENVIRONMENT_SYSTEM_CONFIG>
|
||||
<FADING>
|
||||
<LARGE_SCALE>urban</LARGE_SCALE>
|
||||
<FREE_SPACE_MODEL_PARAMETERS>
|
||||
<PATHLOSS_EXPONENT>2</PATHLOSS_EXPONENT>
|
||||
<PATHLOSS_0_dB>-100</PATHLOSS_0_dB><!--pathloss at 1km -->
|
||||
</FREE_SPACE_MODEL_PARAMETERS>
|
||||
<SMALL_SCALE>AWGN</SMALL_SCALE>
|
||||
</FADING>
|
||||
<WALL_PENETRATION_LOSS_dB>5</WALL_PENETRATION_LOSS_dB>
|
||||
<SYSTEM_BANDWIDTH_MB>7.68</SYSTEM_BANDWIDTH_MB>
|
||||
<SYSTEM_FREQUENCY_GHz>1.9</SYSTEM_FREQUENCY_GHz>
|
||||
<ANTENNA>
|
||||
<eNB_ANTENNA>
|
||||
<RX_NOISE_LEVEL_dB>5</RX_NOISE_LEVEL_dB>
|
||||
<NUMBER_OF_SECTORS>1</NUMBER_OF_SECTORS>
|
||||
<BEAM_WIDTH_dB>1.13</BEAM_WIDTH_dB>
|
||||
<ANTENNA_GAIN_dBi>16</ANTENNA_GAIN_dBi>
|
||||
<TX_POWER_dBm>40</TX_POWER_dBm>
|
||||
</eNB_ANTENNA>
|
||||
<UE_ANTENNA>
|
||||
<RX_NOISE_LEVEL_dB>1</RX_NOISE_LEVEL_dB>
|
||||
<ANTENNA_GAIN_dBi>5</ANTENNA_GAIN_dBi>
|
||||
<TX_POWER_dBm>20</TX_POWER_dBm>
|
||||
</UE_ANTENNA>
|
||||
</ANTENNA>
|
||||
</ENVIRONMENT_SYSTEM_CONFIG>
|
||||
|
||||
<TOPOLOGY_CONFIG>
|
||||
<AREA>
|
||||
<X_m>2000</X_m>
|
||||
<Y_m>2000</Y_m>
|
||||
</AREA>
|
||||
<MOBILITY>
|
||||
<UE_MOBILITY>
|
||||
<RANDOM_UE_DISTRIBUTION>
|
||||
<NUMBER_OF_NODES>1</NUMBER_OF_NODES>
|
||||
</RANDOM_UE_DISTRIBUTION>
|
||||
<UE_MOBILITY_TYPE>STATIC</UE_MOBILITY_TYPE>
|
||||
</UE_MOBILITY>
|
||||
<eNB_MOBILITY>
|
||||
<eNB_INITIAL_DISTRIBUTION>random</eNB_INITIAL_DISTRIBUTION>
|
||||
<RANDOM_eNB_DISTRIBUTION>
|
||||
<NUMBER_OF_CELLS>1</NUMBER_OF_CELLS>
|
||||
</RANDOM_eNB_DISTRIBUTION>
|
||||
<eNB_MOBILITY_TYPE>STATIC</eNB_MOBILITY_TYPE>
|
||||
</eNB_MOBILITY>
|
||||
</MOBILITY>
|
||||
</TOPOLOGY_CONFIG>
|
||||
|
||||
<APPLICATION_CONFIG>
|
||||
<PREDEFINED_TRAFFIC>
|
||||
<SOURCE_ID>0</SOURCE_ID>
|
||||
<APPLICATION_TYPE>scbr</APPLICATION_TYPE>
|
||||
<DESTINATION_ID>1</DESTINATION_ID>
|
||||
<FLOW_START_ms>100</FLOW_START_ms>
|
||||
<FLOW_DURATION_ms>55000</FLOW_DURATION_ms>
|
||||
</PREDEFINED_TRAFFIC>
|
||||
|
||||
<!-- UL -->
|
||||
<!-- <PREDEFINED_TRAFFIC>
|
||||
<SOURCE_ID>1</SOURCE_ID>
|
||||
<FLOW_START_ms>200</FLOW_START_ms>
|
||||
<FLOW_DURATION_ms>600</FLOW_DURATION_ms>
|
||||
<APPLICATION_TYPE>scbr</APPLICATION_TYPE>
|
||||
<DESTINATION_ID>0</DESTINATION_ID>
|
||||
</PREDEFINED_TRAFFIC>
|
||||
-->
|
||||
<CUSTOMIZED_TRAFFIC>
|
||||
<SOURCE_ID>1</SOURCE_ID>
|
||||
<TRANSPORT_PROTOCOL>udp</TRANSPORT_PROTOCOL>
|
||||
<FLOW_START_ms>100</FLOW_START_ms>
|
||||
<FLOW_DURATION_ms>55000</FLOW_DURATION_ms>
|
||||
<IP_VERSION>ipv4</IP_VERSION>
|
||||
<DESTINATION_ID>0</DESTINATION_ID>
|
||||
<IDT_DIST>uniform</IDT_DIST>
|
||||
<IDT_MIN_ms>10</IDT_MIN_ms>
|
||||
<IDT_MAX_ms>100</IDT_MAX_ms>
|
||||
<SIZE_DIST>unifrom</SIZE_DIST>
|
||||
<SIZE_MIN_byte>10</SIZE_MIN_byte>
|
||||
<SIZE_MAX_byte>100</SIZE_MAX_byte>
|
||||
</CUSTOMIZED_TRAFFIC>
|
||||
|
||||
</APPLICATION_CONFIG>
|
||||
|
||||
<EMULATION_CONFIG>
|
||||
<EMULATION_TIME_ms>60000</EMULATION_TIME_ms>
|
||||
<CURVE>disable</CURVE>
|
||||
<PERFORMANCE_METRICS>
|
||||
<THROUGHPUT>enable</THROUGHPUT>
|
||||
<LATENCY>enable</LATENCY>
|
||||
<LOSS_RATE>enable</LOSS_RATE>
|
||||
</PERFORMANCE_METRICS>
|
||||
<LOG> <!-- set the global log level -->
|
||||
<LEVEL>info</LEVEL>
|
||||
<VERBOSITY>low</VERBOSITY>
|
||||
</LOG>
|
||||
<SEED_VALUE>2013</SEED_VALUE> <!-- value 0 means randomly generated by OAI -->
|
||||
|
||||
</EMULATION_CONFIG>
|
||||
|
||||
<PROFILE>CBA_1</PROFILE>
|
||||
|
||||
</OAI_EMULATION>
|
||||
@@ -1,105 +0,0 @@
|
||||
<OAI_EMULATION>
|
||||
<ENVIRONMENT_SYSTEM_CONFIG>
|
||||
<FADING>
|
||||
<LARGE_SCALE>urban</LARGE_SCALE>
|
||||
<FREE_SPACE_MODEL_PARAMETERS>
|
||||
<PATHLOSS_EXPONENT>2</PATHLOSS_EXPONENT>
|
||||
<PATHLOSS_0_dB>-100</PATHLOSS_0_dB><!--pathloss at 1km -->
|
||||
</FREE_SPACE_MODEL_PARAMETERS>
|
||||
<SMALL_SCALE>AWGN</SMALL_SCALE>
|
||||
</FADING>
|
||||
<WALL_PENETRATION_LOSS_dB>5</WALL_PENETRATION_LOSS_dB>
|
||||
<SYSTEM_BANDWIDTH_MB>7.68</SYSTEM_BANDWIDTH_MB>
|
||||
<SYSTEM_FREQUENCY_GHz>1.9</SYSTEM_FREQUENCY_GHz>
|
||||
<ANTENNA>
|
||||
<eNB_ANTENNA>
|
||||
<RX_NOISE_LEVEL_dB>5</RX_NOISE_LEVEL_dB>
|
||||
<NUMBER_OF_SECTORS>1</NUMBER_OF_SECTORS>
|
||||
<BEAM_WIDTH_dB>1.13</BEAM_WIDTH_dB>
|
||||
<ANTENNA_GAIN_dBi>16</ANTENNA_GAIN_dBi>
|
||||
<TX_POWER_dBm>40</TX_POWER_dBm>
|
||||
</eNB_ANTENNA>
|
||||
<UE_ANTENNA>
|
||||
<RX_NOISE_LEVEL_dB>1</RX_NOISE_LEVEL_dB>
|
||||
<ANTENNA_GAIN_dBi>5</ANTENNA_GAIN_dBi>
|
||||
<TX_POWER_dBm>20</TX_POWER_dBm>
|
||||
</UE_ANTENNA>
|
||||
</ANTENNA>
|
||||
</ENVIRONMENT_SYSTEM_CONFIG>
|
||||
|
||||
<TOPOLOGY_CONFIG>
|
||||
<AREA>
|
||||
<X_m>2000</X_m>
|
||||
<Y_m>2000</Y_m>
|
||||
</AREA>
|
||||
<MOBILITY>
|
||||
<UE_MOBILITY>
|
||||
<RANDOM_UE_DISTRIBUTION>
|
||||
<NUMBER_OF_NODES>1</NUMBER_OF_NODES>
|
||||
</RANDOM_UE_DISTRIBUTION>
|
||||
<UE_MOBILITY_TYPE>STATIC</UE_MOBILITY_TYPE>
|
||||
</UE_MOBILITY>
|
||||
<eNB_MOBILITY>
|
||||
<eNB_INITIAL_DISTRIBUTION>random</eNB_INITIAL_DISTRIBUTION>
|
||||
<RANDOM_eNB_DISTRIBUTION>
|
||||
<NUMBER_OF_CELLS>1</NUMBER_OF_CELLS>
|
||||
</RANDOM_eNB_DISTRIBUTION>
|
||||
<eNB_MOBILITY_TYPE>STATIC</eNB_MOBILITY_TYPE>
|
||||
</eNB_MOBILITY>
|
||||
</MOBILITY>
|
||||
</TOPOLOGY_CONFIG>
|
||||
|
||||
<APPLICATION_CONFIG>
|
||||
<PREDEFINED_TRAFFIC>
|
||||
<SOURCE_ID>0</SOURCE_ID>
|
||||
<APPLICATION_TYPE>scbr</APPLICATION_TYPE>
|
||||
<DESTINATION_ID>1</DESTINATION_ID>
|
||||
<FLOW_START_ms>100</FLOW_START_ms>
|
||||
<FLOW_DURATION_ms>55000</FLOW_DURATION_ms>
|
||||
</PREDEFINED_TRAFFIC>
|
||||
|
||||
<!-- UL -->
|
||||
<!-- <PREDEFINED_TRAFFIC>
|
||||
<SOURCE_ID>1</SOURCE_ID>
|
||||
<FLOW_START_ms>200</FLOW_START_ms>
|
||||
<FLOW_DURATION_ms>600</FLOW_DURATION_ms>
|
||||
<APPLICATION_TYPE>scbr</APPLICATION_TYPE>
|
||||
<DESTINATION_ID>0</DESTINATION_ID>
|
||||
</PREDEFINED_TRAFFIC>
|
||||
-->
|
||||
<CUSTOMIZED_TRAFFIC>
|
||||
<SOURCE_ID>1</SOURCE_ID>
|
||||
<TRANSPORT_PROTOCOL>udp</TRANSPORT_PROTOCOL>
|
||||
<FLOW_START_ms>100</FLOW_START_ms>
|
||||
<FLOW_DURATION_ms>55000</FLOW_DURATION_ms>
|
||||
<IP_VERSION>ipv4</IP_VERSION>
|
||||
<DESTINATION_ID>0</DESTINATION_ID>
|
||||
<IDT_DIST>uniform</IDT_DIST>
|
||||
<IDT_MIN_ms>10</IDT_MIN_ms>
|
||||
<IDT_MAX_ms>100</IDT_MAX_ms>
|
||||
<SIZE_DIST>uniform</SIZE_DIST>
|
||||
<SIZE_MIN_byte>100</SIZE_MIN_byte>
|
||||
<SIZE_MAX_byte>1000</SIZE_MAX_byte>
|
||||
</CUSTOMIZED_TRAFFIC>
|
||||
|
||||
</APPLICATION_CONFIG>
|
||||
|
||||
<EMULATION_CONFIG>
|
||||
<EMULATION_TIME_ms>60000</EMULATION_TIME_ms> <!--set to infinity-->
|
||||
<CURVE>disable</CURVE>
|
||||
<PERFORMANCE_METRICS>
|
||||
<THROUGHPUT>enable</THROUGHPUT>
|
||||
<LATENCY>enable</LATENCY>
|
||||
<LOSS_RATE>enable</LOSS_RATE>
|
||||
</PERFORMANCE_METRICS>
|
||||
<LOG> <!-- set the global log level -->
|
||||
<LEVEL>info</LEVEL>
|
||||
<VERBOSITY>low</VERBOSITY>
|
||||
</LOG>
|
||||
<SEED_VALUE>2013</SEED_VALUE> <!-- value 0 means randomly generated by OAI -->
|
||||
|
||||
</EMULATION_CONFIG>
|
||||
|
||||
<PROFILE>CBA_1</PROFILE>
|
||||
|
||||
</OAI_EMULATION>
|
||||
@@ -1,105 +0,0 @@
|
||||
<OAI_EMULATION>
|
||||
<ENVIRONMENT_SYSTEM_CONFIG>
|
||||
<FADING>
|
||||
<LARGE_SCALE>urban</LARGE_SCALE>
|
||||
<FREE_SPACE_MODEL_PARAMETERS>
|
||||
<PATHLOSS_EXPONENT>2</PATHLOSS_EXPONENT>
|
||||
<PATHLOSS_0_dB>-100</PATHLOSS_0_dB><!--pathloss at 1km -->
|
||||
</FREE_SPACE_MODEL_PARAMETERS>
|
||||
<SMALL_SCALE>AWGN</SMALL_SCALE>
|
||||
</FADING>
|
||||
<WALL_PENETRATION_LOSS_dB>5</WALL_PENETRATION_LOSS_dB>
|
||||
<SYSTEM_BANDWIDTH_MB>7.68</SYSTEM_BANDWIDTH_MB>
|
||||
<SYSTEM_FREQUENCY_GHz>1.9</SYSTEM_FREQUENCY_GHz>
|
||||
<ANTENNA>
|
||||
<eNB_ANTENNA>
|
||||
<RX_NOISE_LEVEL_dB>5</RX_NOISE_LEVEL_dB>
|
||||
<NUMBER_OF_SECTORS>1</NUMBER_OF_SECTORS>
|
||||
<BEAM_WIDTH_dB>1.13</BEAM_WIDTH_dB>
|
||||
<ANTENNA_GAIN_dBi>16</ANTENNA_GAIN_dBi>
|
||||
<TX_POWER_dBm>40</TX_POWER_dBm>
|
||||
</eNB_ANTENNA>
|
||||
<UE_ANTENNA>
|
||||
<RX_NOISE_LEVEL_dB>1</RX_NOISE_LEVEL_dB>
|
||||
<ANTENNA_GAIN_dBi>5</ANTENNA_GAIN_dBi>
|
||||
<TX_POWER_dBm>20</TX_POWER_dBm>
|
||||
</UE_ANTENNA>
|
||||
</ANTENNA>
|
||||
</ENVIRONMENT_SYSTEM_CONFIG>
|
||||
|
||||
<TOPOLOGY_CONFIG>
|
||||
<AREA>
|
||||
<X_m>2000</X_m>
|
||||
<Y_m>2000</Y_m>
|
||||
</AREA>
|
||||
<MOBILITY>
|
||||
<UE_MOBILITY>
|
||||
<RANDOM_UE_DISTRIBUTION>
|
||||
<NUMBER_OF_NODES>1</NUMBER_OF_NODES>
|
||||
</RANDOM_UE_DISTRIBUTION>
|
||||
<UE_MOBILITY_TYPE>STATIC</UE_MOBILITY_TYPE>
|
||||
</UE_MOBILITY>
|
||||
<eNB_MOBILITY>
|
||||
<eNB_INITIAL_DISTRIBUTION>random</eNB_INITIAL_DISTRIBUTION>
|
||||
<RANDOM_eNB_DISTRIBUTION>
|
||||
<NUMBER_OF_CELLS>1</NUMBER_OF_CELLS>
|
||||
</RANDOM_eNB_DISTRIBUTION>
|
||||
<eNB_MOBILITY_TYPE>STATIC</eNB_MOBILITY_TYPE>
|
||||
</eNB_MOBILITY>
|
||||
</MOBILITY>
|
||||
</TOPOLOGY_CONFIG>
|
||||
|
||||
<APPLICATION_CONFIG>
|
||||
<PREDEFINED_TRAFFIC>
|
||||
<SOURCE_ID>0</SOURCE_ID>
|
||||
<APPLICATION_TYPE>scbr</APPLICATION_TYPE>
|
||||
<DESTINATION_ID>1</DESTINATION_ID>
|
||||
<FLOW_START_ms>100</FLOW_START_ms>
|
||||
<FLOW_DURATION_ms>55000</FLOW_DURATION_ms>
|
||||
</PREDEFINED_TRAFFIC>
|
||||
|
||||
<!-- UL -->
|
||||
<!-- <PREDEFINED_TRAFFIC>
|
||||
<SOURCE_ID>1</SOURCE_ID>
|
||||
<FLOW_START_ms>200</FLOW_START_ms>
|
||||
<FLOW_DURATION_ms>600</FLOW_DURATION_ms>
|
||||
<APPLICATION_TYPE>scbr</APPLICATION_TYPE>
|
||||
<DESTINATION_ID>0</DESTINATION_ID>
|
||||
</PREDEFINED_TRAFFIC>
|
||||
-->
|
||||
<CUSTOMIZED_TRAFFIC>
|
||||
<SOURCE_ID>1</SOURCE_ID>
|
||||
<TRANSPORT_PROTOCOL>udp</TRANSPORT_PROTOCOL>
|
||||
<FLOW_START_ms>100</FLOW_START_ms>
|
||||
<FLOW_DURATION_ms>55000</FLOW_DURATION_ms>
|
||||
<IP_VERSION>ipv4</IP_VERSION>
|
||||
<DESTINATION_ID>0</DESTINATION_ID>
|
||||
<IDT_DIST>uniform</IDT_DIST>
|
||||
<IDT_MIN_ms>10</IDT_MIN_ms>
|
||||
<IDT_MAX_ms>100</IDT_MAX_ms>
|
||||
<SIZE_DIST>uniform</SIZE_DIST>
|
||||
<SIZE_MIN_byte>1000</SIZE_MIN_byte>
|
||||
<SIZE_MAX_byte>6000</SIZE_MAX_byte>
|
||||
</CUSTOMIZED_TRAFFIC>
|
||||
|
||||
</APPLICATION_CONFIG>
|
||||
|
||||
<EMULATION_CONFIG>
|
||||
<EMULATION_TIME_ms>60000</EMULATION_TIME_ms> <!--set to infinity-->
|
||||
<CURVE>disable</CURVE>
|
||||
<PERFORMANCE_METRICS>
|
||||
<THROUGHPUT>enable</THROUGHPUT>
|
||||
<LATENCY>enable</LATENCY>
|
||||
<LOSS_RATE>enable</LOSS_RATE>
|
||||
</PERFORMANCE_METRICS>
|
||||
<LOG> <!-- set the global log level -->
|
||||
<LEVEL>info</LEVEL>
|
||||
<VERBOSITY>low</VERBOSITY>
|
||||
</LOG>
|
||||
<SEED_VALUE>2013</SEED_VALUE> <!-- value 0 means randomly generated by OAI -->
|
||||
|
||||
</EMULATION_CONFIG>
|
||||
|
||||
<PROFILE>CBA_1</PROFILE>
|
||||
|
||||
</OAI_EMULATION>
|
||||
@@ -1,106 +0,0 @@
|
||||
<OAI_EMULATION>
|
||||
<ENVIRONMENT_SYSTEM_CONFIG>
|
||||
<FADING>
|
||||
<LARGE_SCALE>urban</LARGE_SCALE>
|
||||
<FREE_SPACE_MODEL_PARAMETERS>
|
||||
<PATHLOSS_EXPONENT>2</PATHLOSS_EXPONENT>
|
||||
<PATHLOSS_0_dB>-100</PATHLOSS_0_dB><!--pathloss at 1km -->
|
||||
</FREE_SPACE_MODEL_PARAMETERS>
|
||||
<SMALL_SCALE>AWGN</SMALL_SCALE>
|
||||
</FADING>
|
||||
<WALL_PENETRATION_LOSS_dB>5</WALL_PENETRATION_LOSS_dB>
|
||||
<SYSTEM_BANDWIDTH_MB>7.68</SYSTEM_BANDWIDTH_MB>
|
||||
<SYSTEM_FREQUENCY_GHz>1.9</SYSTEM_FREQUENCY_GHz>
|
||||
<ANTENNA>
|
||||
<eNB_ANTENNA>
|
||||
<RX_NOISE_LEVEL_dB>5</RX_NOISE_LEVEL_dB>
|
||||
<NUMBER_OF_SECTORS>1</NUMBER_OF_SECTORS>
|
||||
<BEAM_WIDTH_dB>1.13</BEAM_WIDTH_dB>
|
||||
<ANTENNA_GAIN_dBi>16</ANTENNA_GAIN_dBi>
|
||||
<TX_POWER_dBm>40</TX_POWER_dBm>
|
||||
</eNB_ANTENNA>
|
||||
<UE_ANTENNA>
|
||||
<RX_NOISE_LEVEL_dB>1</RX_NOISE_LEVEL_dB>
|
||||
<ANTENNA_GAIN_dBi>5</ANTENNA_GAIN_dBi>
|
||||
<TX_POWER_dBm>20</TX_POWER_dBm>
|
||||
</UE_ANTENNA>
|
||||
</ANTENNA>
|
||||
</ENVIRONMENT_SYSTEM_CONFIG>
|
||||
|
||||
<TOPOLOGY_CONFIG>
|
||||
<AREA>
|
||||
<X_m>2000</X_m>
|
||||
<Y_m>2000</Y_m>
|
||||
</AREA>
|
||||
<MOBILITY>
|
||||
<UE_MOBILITY>
|
||||
<RANDOM_UE_DISTRIBUTION>
|
||||
<NUMBER_OF_NODES>1</NUMBER_OF_NODES>
|
||||
</RANDOM_UE_DISTRIBUTION>
|
||||
<UE_MOBILITY_TYPE>STATIC</UE_MOBILITY_TYPE>
|
||||
</UE_MOBILITY>
|
||||
<eNB_MOBILITY>
|
||||
<eNB_INITIAL_DISTRIBUTION>random</eNB_INITIAL_DISTRIBUTION>
|
||||
<RANDOM_eNB_DISTRIBUTION>
|
||||
<NUMBER_OF_CELLS>1</NUMBER_OF_CELLS>
|
||||
</RANDOM_eNB_DISTRIBUTION>
|
||||
<eNB_MOBILITY_TYPE>STATIC</eNB_MOBILITY_TYPE>
|
||||
</eNB_MOBILITY>
|
||||
</MOBILITY>
|
||||
</TOPOLOGY_CONFIG>
|
||||
|
||||
<APPLICATION_CONFIG>
|
||||
|
||||
<PREDEFINED_TRAFFIC>
|
||||
<SOURCE_ID>0</SOURCE_ID>
|
||||
<APPLICATION_TYPE>scbr</APPLICATION_TYPE>
|
||||
<DESTINATION_ID>1</DESTINATION_ID>
|
||||
<FLOW_START_ms>100</FLOW_START_ms>
|
||||
<FLOW_DURATION_ms>55000</FLOW_DURATION_ms>
|
||||
</PREDEFINED_TRAFFIC>
|
||||
|
||||
<!-- UL -->
|
||||
<!-- <PREDEFINED_TRAFFIC>
|
||||
<SOURCE_ID>1</SOURCE_ID>
|
||||
<FLOW_START_ms>200</FLOW_START_ms>
|
||||
<FLOW_DURATION_ms>600</FLOW_DURATION_ms>
|
||||
<APPLICATION_TYPE>scbr</APPLICATION_TYPE>
|
||||
<DESTINATION_ID>0</DESTINATION_ID>
|
||||
</PREDEFINED_TRAFFIC>
|
||||
-->
|
||||
<CUSTOMIZED_TRAFFIC>
|
||||
<SOURCE_ID>1</SOURCE_ID>
|
||||
<TRANSPORT_PROTOCOL>udp</TRANSPORT_PROTOCOL>
|
||||
<FLOW_START_ms>100</FLOW_START_ms>
|
||||
<FLOW_DURATION_ms>55000</FLOW_DURATION_ms>
|
||||
<IP_VERSION>ipv4</IP_VERSION>
|
||||
<DESTINATION_ID>0</DESTINATION_ID>
|
||||
<IDT_DIST>uniform</IDT_DIST>
|
||||
<IDT_MIN_ms>100</IDT_MIN_ms>
|
||||
<IDT_MAX_ms>1000</IDT_MAX_ms>
|
||||
<SIZE_DIST>uniform</SIZE_DIST>
|
||||
<SIZE_MIN_byte>10</SIZE_MIN_byte>
|
||||
<SIZE_MAX_byte>100</SIZE_MAX_byte>
|
||||
</CUSTOMIZED_TRAFFIC>
|
||||
|
||||
</APPLICATION_CONFIG>
|
||||
|
||||
<EMULATION_CONFIG>
|
||||
<EMULATION_TIME_ms>60000</EMULATION_TIME_ms> <!--set to infinity-->
|
||||
<CURVE>disable</CURVE>
|
||||
<PERFORMANCE_METRICS>
|
||||
<THROUGHPUT>enable</THROUGHPUT>
|
||||
<LATENCY>enable</LATENCY>
|
||||
<LOSS_RATE>enable</LOSS_RATE>
|
||||
</PERFORMANCE_METRICS>
|
||||
<LOG> <!-- set the global log level -->
|
||||
<LEVEL>info</LEVEL>
|
||||
<VERBOSITY>low</VERBOSITY>
|
||||
</LOG>
|
||||
<SEED_VALUE>2013</SEED_VALUE> <!-- value 0 means randomly generated by OAI -->
|
||||
|
||||
</EMULATION_CONFIG>
|
||||
|
||||
<PROFILE>CBA_1</PROFILE>
|
||||
|
||||
</OAI_EMULATION>
|
||||
@@ -1,106 +0,0 @@
|
||||
<OAI_EMULATION>
|
||||
<ENVIRONMENT_SYSTEM_CONFIG>
|
||||
<FADING>
|
||||
<LARGE_SCALE>urban</LARGE_SCALE>
|
||||
<FREE_SPACE_MODEL_PARAMETERS>
|
||||
<PATHLOSS_EXPONENT>2</PATHLOSS_EXPONENT>
|
||||
<PATHLOSS_0_dB>-100</PATHLOSS_0_dB><!--pathloss at 1km -->
|
||||
</FREE_SPACE_MODEL_PARAMETERS>
|
||||
<SMALL_SCALE>AWGN</SMALL_SCALE>
|
||||
</FADING>
|
||||
<WALL_PENETRATION_LOSS_dB>5</WALL_PENETRATION_LOSS_dB>
|
||||
<SYSTEM_BANDWIDTH_MB>7.68</SYSTEM_BANDWIDTH_MB>
|
||||
<SYSTEM_FREQUENCY_GHz>1.9</SYSTEM_FREQUENCY_GHz>
|
||||
<ANTENNA>
|
||||
<eNB_ANTENNA>
|
||||
<RX_NOISE_LEVEL_dB>5</RX_NOISE_LEVEL_dB>
|
||||
<NUMBER_OF_SECTORS>1</NUMBER_OF_SECTORS>
|
||||
<BEAM_WIDTH_dB>1.13</BEAM_WIDTH_dB>
|
||||
<ANTENNA_GAIN_dBi>16</ANTENNA_GAIN_dBi>
|
||||
<TX_POWER_dBm>40</TX_POWER_dBm>
|
||||
</eNB_ANTENNA>
|
||||
<UE_ANTENNA>
|
||||
<RX_NOISE_LEVEL_dB>1</RX_NOISE_LEVEL_dB>
|
||||
<ANTENNA_GAIN_dBi>5</ANTENNA_GAIN_dBi>
|
||||
<TX_POWER_dBm>20</TX_POWER_dBm>
|
||||
</UE_ANTENNA>
|
||||
</ANTENNA>
|
||||
</ENVIRONMENT_SYSTEM_CONFIG>
|
||||
|
||||
<TOPOLOGY_CONFIG>
|
||||
<AREA>
|
||||
<X_m>2000</X_m>
|
||||
<Y_m>2000</Y_m>
|
||||
</AREA>
|
||||
<MOBILITY>
|
||||
<UE_MOBILITY>
|
||||
<RANDOM_UE_DISTRIBUTION>
|
||||
<NUMBER_OF_NODES>1</NUMBER_OF_NODES>
|
||||
</RANDOM_UE_DISTRIBUTION>
|
||||
<UE_MOBILITY_TYPE>STATIC</UE_MOBILITY_TYPE>
|
||||
</UE_MOBILITY>
|
||||
<eNB_MOBILITY>
|
||||
<eNB_INITIAL_DISTRIBUTION>random</eNB_INITIAL_DISTRIBUTION>
|
||||
<RANDOM_eNB_DISTRIBUTION>
|
||||
<NUMBER_OF_CELLS>1</NUMBER_OF_CELLS>
|
||||
</RANDOM_eNB_DISTRIBUTION>
|
||||
<eNB_MOBILITY_TYPE>STATIC</eNB_MOBILITY_TYPE>
|
||||
</eNB_MOBILITY>
|
||||
</MOBILITY>
|
||||
</TOPOLOGY_CONFIG>
|
||||
|
||||
<APPLICATION_CONFIG>
|
||||
|
||||
<PREDEFINED_TRAFFIC>
|
||||
<SOURCE_ID>0</SOURCE_ID>
|
||||
<APPLICATION_TYPE>scbr</APPLICATION_TYPE>
|
||||
<DESTINATION_ID>1</DESTINATION_ID>
|
||||
<FLOW_START_ms>100</FLOW_START_ms>
|
||||
<FLOW_DURATION_ms>55000</FLOW_DURATION_ms>
|
||||
</PREDEFINED_TRAFFIC>
|
||||
|
||||
<!-- UL -->
|
||||
<!-- <PREDEFINED_TRAFFIC>
|
||||
<SOURCE_ID>1</SOURCE_ID>
|
||||
<FLOW_START_ms>200</FLOW_START_ms>
|
||||
<FLOW_DURATION_ms>600</FLOW_DURATION_ms>
|
||||
<APPLICATION_TYPE>scbr</APPLICATION_TYPE>
|
||||
<DESTINATION_ID>0</DESTINATION_ID>
|
||||
</PREDEFINED_TRAFFIC>
|
||||
-->
|
||||
<CUSTOMIZED_TRAFFIC>
|
||||
<SOURCE_ID>1</SOURCE_ID>
|
||||
<TRANSPORT_PROTOCOL>udp</TRANSPORT_PROTOCOL>
|
||||
<FLOW_START_ms>100</FLOW_START_ms>
|
||||
<FLOW_DURATION_ms>55000</FLOW_DURATION_ms>
|
||||
<IP_VERSION>ipv4</IP_VERSION>
|
||||
<DESTINATION_ID>0</DESTINATION_ID>
|
||||
<IDT_DIST>uniform</IDT_DIST>
|
||||
<IDT_MIN_ms>100</IDT_MIN_ms>
|
||||
<IDT_MAX_ms>1000</IDT_MAX_ms>
|
||||
<SIZE_DIST>uniform</SIZE_DIST>
|
||||
<SIZE_MIN_byte>100</SIZE_MIN_byte>
|
||||
<SIZE_MAX_byte>1000</SIZE_MAX_byte>
|
||||
</CUSTOMIZED_TRAFFIC>
|
||||
|
||||
</APPLICATION_CONFIG>
|
||||
|
||||
<EMULATION_CONFIG>
|
||||
<EMULATION_TIME_ms>60000</EMULATION_TIME_ms> <!--set to infinity-->
|
||||
<CURVE>disable</CURVE>
|
||||
<PERFORMANCE_METRICS>
|
||||
<THROUGHPUT>enable</THROUGHPUT>
|
||||
<LATENCY>enable</LATENCY>
|
||||
<LOSS_RATE>enable</LOSS_RATE>
|
||||
</PERFORMANCE_METRICS>
|
||||
<LOG> <!-- set the global log level -->
|
||||
<LEVEL>info</LEVEL>
|
||||
<VERBOSITY>low</VERBOSITY>
|
||||
</LOG>
|
||||
<SEED_VALUE>2013</SEED_VALUE> <!-- value 0 means randomly generated by OAI -->
|
||||
|
||||
</EMULATION_CONFIG>
|
||||
|
||||
<PROFILE>CBA_1</PROFILE>
|
||||
|
||||
</OAI_EMULATION>
|
||||
@@ -1,106 +0,0 @@
|
||||
<OAI_EMULATION>
|
||||
<ENVIRONMENT_SYSTEM_CONFIG>
|
||||
<FADING>
|
||||
<LARGE_SCALE>urban</LARGE_SCALE>
|
||||
<FREE_SPACE_MODEL_PARAMETERS>
|
||||
<PATHLOSS_EXPONENT>2</PATHLOSS_EXPONENT>
|
||||
<PATHLOSS_0_dB>-100</PATHLOSS_0_dB><!--pathloss at 1km -->
|
||||
</FREE_SPACE_MODEL_PARAMETERS>
|
||||
<SMALL_SCALE>AWGN</SMALL_SCALE>
|
||||
</FADING>
|
||||
<WALL_PENETRATION_LOSS_dB>5</WALL_PENETRATION_LOSS_dB>
|
||||
<SYSTEM_BANDWIDTH_MB>7.68</SYSTEM_BANDWIDTH_MB>
|
||||
<SYSTEM_FREQUENCY_GHz>1.9</SYSTEM_FREQUENCY_GHz>
|
||||
<ANTENNA>
|
||||
<eNB_ANTENNA>
|
||||
<RX_NOISE_LEVEL_dB>5</RX_NOISE_LEVEL_dB>
|
||||
<NUMBER_OF_SECTORS>1</NUMBER_OF_SECTORS>
|
||||
<BEAM_WIDTH_dB>1.13</BEAM_WIDTH_dB>
|
||||
<ANTENNA_GAIN_dBi>16</ANTENNA_GAIN_dBi>
|
||||
<TX_POWER_dBm>40</TX_POWER_dBm>
|
||||
</eNB_ANTENNA>
|
||||
<UE_ANTENNA>
|
||||
<RX_NOISE_LEVEL_dB>1</RX_NOISE_LEVEL_dB>
|
||||
<ANTENNA_GAIN_dBi>5</ANTENNA_GAIN_dBi>
|
||||
<TX_POWER_dBm>20</TX_POWER_dBm>
|
||||
</UE_ANTENNA>
|
||||
</ANTENNA>
|
||||
</ENVIRONMENT_SYSTEM_CONFIG>
|
||||
|
||||
<TOPOLOGY_CONFIG>
|
||||
<AREA>
|
||||
<X_m>2000</X_m>
|
||||
<Y_m>2000</Y_m>
|
||||
</AREA>
|
||||
<MOBILITY>
|
||||
<UE_MOBILITY>
|
||||
<RANDOM_UE_DISTRIBUTION>
|
||||
<NUMBER_OF_NODES>1</NUMBER_OF_NODES>
|
||||
</RANDOM_UE_DISTRIBUTION>
|
||||
<UE_MOBILITY_TYPE>STATIC</UE_MOBILITY_TYPE>
|
||||
</UE_MOBILITY>
|
||||
<eNB_MOBILITY>
|
||||
<eNB_INITIAL_DISTRIBUTION>random</eNB_INITIAL_DISTRIBUTION>
|
||||
<RANDOM_eNB_DISTRIBUTION>
|
||||
<NUMBER_OF_CELLS>1</NUMBER_OF_CELLS>
|
||||
</RANDOM_eNB_DISTRIBUTION>
|
||||
<eNB_MOBILITY_TYPE>STATIC</eNB_MOBILITY_TYPE>
|
||||
</eNB_MOBILITY>
|
||||
</MOBILITY>
|
||||
</TOPOLOGY_CONFIG>
|
||||
|
||||
<APPLICATION_CONFIG>
|
||||
|
||||
<PREDEFINED_TRAFFIC>
|
||||
<SOURCE_ID>0</SOURCE_ID>
|
||||
<APPLICATION_TYPE>scbr</APPLICATION_TYPE>
|
||||
<DESTINATION_ID>1</DESTINATION_ID>
|
||||
<FLOW_START_ms>100</FLOW_START_ms>
|
||||
<FLOW_DURATION_ms>55000</FLOW_DURATION_ms>
|
||||
</PREDEFINED_TRAFFIC>
|
||||
|
||||
<!-- UL -->
|
||||
<!-- <PREDEFINED_TRAFFIC>
|
||||
<SOURCE_ID>1</SOURCE_ID>
|
||||
<FLOW_START_ms>200</FLOW_START_ms>
|
||||
<FLOW_DURATION_ms>600</FLOW_DURATION_ms>
|
||||
<APPLICATION_TYPE>scbr</APPLICATION_TYPE>
|
||||
<DESTINATION_ID>0</DESTINATION_ID>
|
||||
</PREDEFINED_TRAFFIC>
|
||||
-->
|
||||
<CUSTOMIZED_TRAFFIC>
|
||||
<SOURCE_ID>1</SOURCE_ID>
|
||||
<TRANSPORT_PROTOCOL>udp</TRANSPORT_PROTOCOL>
|
||||
<FLOW_START_ms>100</FLOW_START_ms>
|
||||
<FLOW_DURATION_ms>55000</FLOW_DURATION_ms>
|
||||
<IP_VERSION>ipv4</IP_VERSION>
|
||||
<DESTINATION_ID>0</DESTINATION_ID>
|
||||
<IDT_DIST>uniform</IDT_DIST>
|
||||
<IDT_MIN_ms>100</IDT_MIN_ms>
|
||||
<IDT_MAX_ms>1000</IDT_MAX_ms>
|
||||
<SIZE_DIST>uniform</SIZE_DIST>
|
||||
<SIZE_MIN_byte>1000</SIZE_MIN_byte>
|
||||
<SIZE_MAX_byte>9000</SIZE_MAX_byte>
|
||||
</CUSTOMIZED_TRAFFIC>
|
||||
|
||||
</APPLICATION_CONFIG>
|
||||
|
||||
<EMULATION_CONFIG>
|
||||
<EMULATION_TIME_ms>60000</EMULATION_TIME_ms> <!--set to infinity-->
|
||||
<CURVE>disable</CURVE>
|
||||
<PERFORMANCE_METRICS>
|
||||
<THROUGHPUT>enable</THROUGHPUT>
|
||||
<LATENCY>enable</LATENCY>
|
||||
<LOSS_RATE>enable</LOSS_RATE>
|
||||
</PERFORMANCE_METRICS>
|
||||
<LOG> <!-- set the global log level -->
|
||||
<LEVEL>info</LEVEL>
|
||||
<VERBOSITY>low</VERBOSITY>
|
||||
</LOG>
|
||||
<SEED_VALUE>2013</SEED_VALUE> <!-- value 0 means randomly generated by OAI -->
|
||||
|
||||
</EMULATION_CONFIG>
|
||||
|
||||
<PROFILE>CBA_1</PROFILE>
|
||||
|
||||
</OAI_EMULATION>
|
||||
@@ -1,106 +0,0 @@
|
||||
<OAI_EMULATION>
|
||||
<ENVIRONMENT_SYSTEM_CONFIG>
|
||||
<FADING>
|
||||
<LARGE_SCALE>urban</LARGE_SCALE>
|
||||
<FREE_SPACE_MODEL_PARAMETERS>
|
||||
<PATHLOSS_EXPONENT>2</PATHLOSS_EXPONENT>
|
||||
<PATHLOSS_0_dB>-100</PATHLOSS_0_dB><!--pathloss at 1km -->
|
||||
</FREE_SPACE_MODEL_PARAMETERS>
|
||||
<SMALL_SCALE>AWGN</SMALL_SCALE>
|
||||
</FADING>
|
||||
<WALL_PENETRATION_LOSS_dB>5</WALL_PENETRATION_LOSS_dB>
|
||||
<SYSTEM_BANDWIDTH_MB>7.68</SYSTEM_BANDWIDTH_MB>
|
||||
<SYSTEM_FREQUENCY_GHz>1.9</SYSTEM_FREQUENCY_GHz>
|
||||
<ANTENNA>
|
||||
<eNB_ANTENNA>
|
||||
<RX_NOISE_LEVEL_dB>5</RX_NOISE_LEVEL_dB>
|
||||
<NUMBER_OF_SECTORS>1</NUMBER_OF_SECTORS>
|
||||
<BEAM_WIDTH_dB>1.13</BEAM_WIDTH_dB>
|
||||
<ANTENNA_GAIN_dBi>16</ANTENNA_GAIN_dBi>
|
||||
<TX_POWER_dBm>40</TX_POWER_dBm>
|
||||
</eNB_ANTENNA>
|
||||
<UE_ANTENNA>
|
||||
<RX_NOISE_LEVEL_dB>1</RX_NOISE_LEVEL_dB>
|
||||
<ANTENNA_GAIN_dBi>5</ANTENNA_GAIN_dBi>
|
||||
<TX_POWER_dBm>20</TX_POWER_dBm>
|
||||
</UE_ANTENNA>
|
||||
</ANTENNA>
|
||||
</ENVIRONMENT_SYSTEM_CONFIG>
|
||||
|
||||
<TOPOLOGY_CONFIG>
|
||||
<AREA>
|
||||
<X_m>2000</X_m>
|
||||
<Y_m>2000</Y_m>
|
||||
</AREA>
|
||||
<MOBILITY>
|
||||
<UE_MOBILITY>
|
||||
<RANDOM_UE_DISTRIBUTION>
|
||||
<NUMBER_OF_NODES>1</NUMBER_OF_NODES>
|
||||
</RANDOM_UE_DISTRIBUTION>
|
||||
<UE_MOBILITY_TYPE>STATIC</UE_MOBILITY_TYPE>
|
||||
</UE_MOBILITY>
|
||||
<eNB_MOBILITY>
|
||||
<eNB_INITIAL_DISTRIBUTION>random</eNB_INITIAL_DISTRIBUTION>
|
||||
<RANDOM_eNB_DISTRIBUTION>
|
||||
<NUMBER_OF_CELLS>1</NUMBER_OF_CELLS>
|
||||
</RANDOM_eNB_DISTRIBUTION>
|
||||
<eNB_MOBILITY_TYPE>STATIC</eNB_MOBILITY_TYPE>
|
||||
</eNB_MOBILITY>
|
||||
</MOBILITY>
|
||||
</TOPOLOGY_CONFIG>
|
||||
|
||||
<APPLICATION_CONFIG>
|
||||
|
||||
<PREDEFINED_TRAFFIC>
|
||||
<SOURCE_ID>0</SOURCE_ID>
|
||||
<APPLICATION_TYPE>scbr</APPLICATION_TYPE>
|
||||
<DESTINATION_ID>1</DESTINATION_ID>
|
||||
<FLOW_START_ms>100</FLOW_START_ms>
|
||||
<FLOW_DURATION_ms>55000</FLOW_DURATION_ms>
|
||||
</PREDEFINED_TRAFFIC>
|
||||
|
||||
<!-- UL -->
|
||||
<!-- <PREDEFINED_TRAFFIC>
|
||||
<SOURCE_ID>1</SOURCE_ID>
|
||||
<FLOW_START_ms>200</FLOW_START_ms>
|
||||
<FLOW_DURATION_ms>600</FLOW_DURATION_ms>
|
||||
<APPLICATION_TYPE>scbr</APPLICATION_TYPE>
|
||||
<DESTINATION_ID>0</DESTINATION_ID>
|
||||
</PREDEFINED_TRAFFIC>
|
||||
-->
|
||||
<CUSTOMIZED_TRAFFIC>
|
||||
<SOURCE_ID>1</SOURCE_ID>
|
||||
<TRANSPORT_PROTOCOL>udp</TRANSPORT_PROTOCOL>
|
||||
<FLOW_START_ms>100</FLOW_START_ms>
|
||||
<FLOW_DURATION_ms>55000</FLOW_DURATION_ms>
|
||||
<IP_VERSION>ipv4</IP_VERSION>
|
||||
<DESTINATION_ID>0</DESTINATION_ID>
|
||||
<IDT_DIST>uniform</IDT_DIST>
|
||||
<IDT_MIN_ms>1000</IDT_MIN_ms>
|
||||
<IDT_MAX_ms>10000</IDT_MAX_ms>
|
||||
<SIZE_DIST>uniform</SIZE_DIST>
|
||||
<SIZE_MIN_byte>10</SIZE_MIN_byte>
|
||||
<SIZE_MAX_byte>100</SIZE_MAX_byte>
|
||||
</CUSTOMIZED_TRAFFIC>
|
||||
|
||||
</APPLICATION_CONFIG>
|
||||
|
||||
<EMULATION_CONFIG>
|
||||
<EMULATION_TIME_ms>60000</EMULATION_TIME_ms> <!--set to infinity-->
|
||||
<CURVE>disable</CURVE>
|
||||
<PERFORMANCE_METRICS>
|
||||
<THROUGHPUT>enable</THROUGHPUT>
|
||||
<LATENCY>enable</LATENCY>
|
||||
<LOSS_RATE>enable</LOSS_RATE>
|
||||
</PERFORMANCE_METRICS>
|
||||
<LOG> <!-- set the global log level -->
|
||||
<LEVEL>info</LEVEL>
|
||||
<VERBOSITY>low</VERBOSITY>
|
||||
</LOG>
|
||||
<SEED_VALUE>2013</SEED_VALUE> <!-- value 0 means randomly generated by OAI -->
|
||||
|
||||
</EMULATION_CONFIG>
|
||||
|
||||
<PROFILE>CBA_1</PROFILE>
|
||||
|
||||
</OAI_EMULATION>
|
||||
@@ -1,106 +0,0 @@
|
||||
<OAI_EMULATION>
|
||||
<ENVIRONMENT_SYSTEM_CONFIG>
|
||||
<FADING>
|
||||
<LARGE_SCALE>urban</LARGE_SCALE>
|
||||
<FREE_SPACE_MODEL_PARAMETERS>
|
||||
<PATHLOSS_EXPONENT>2</PATHLOSS_EXPONENT>
|
||||
<PATHLOSS_0_dB>-100</PATHLOSS_0_dB><!--pathloss at 1km -->
|
||||
</FREE_SPACE_MODEL_PARAMETERS>
|
||||
<SMALL_SCALE>AWGN</SMALL_SCALE>
|
||||
</FADING>
|
||||
<WALL_PENETRATION_LOSS_dB>5</WALL_PENETRATION_LOSS_dB>
|
||||
<SYSTEM_BANDWIDTH_MB>7.68</SYSTEM_BANDWIDTH_MB>
|
||||
<SYSTEM_FREQUENCY_GHz>1.9</SYSTEM_FREQUENCY_GHz>
|
||||
<ANTENNA>
|
||||
<eNB_ANTENNA>
|
||||
<RX_NOISE_LEVEL_dB>5</RX_NOISE_LEVEL_dB>
|
||||
<NUMBER_OF_SECTORS>1</NUMBER_OF_SECTORS>
|
||||
<BEAM_WIDTH_dB>1.13</BEAM_WIDTH_dB>
|
||||
<ANTENNA_GAIN_dBi>16</ANTENNA_GAIN_dBi>
|
||||
<TX_POWER_dBm>40</TX_POWER_dBm>
|
||||
</eNB_ANTENNA>
|
||||
<UE_ANTENNA>
|
||||
<RX_NOISE_LEVEL_dB>1</RX_NOISE_LEVEL_dB>
|
||||
<ANTENNA_GAIN_dBi>5</ANTENNA_GAIN_dBi>
|
||||
<TX_POWER_dBm>20</TX_POWER_dBm>
|
||||
</UE_ANTENNA>
|
||||
</ANTENNA>
|
||||
</ENVIRONMENT_SYSTEM_CONFIG>
|
||||
|
||||
<TOPOLOGY_CONFIG>
|
||||
<AREA>
|
||||
<X_m>2000</X_m>
|
||||
<Y_m>2000</Y_m>
|
||||
</AREA>
|
||||
<MOBILITY>
|
||||
<UE_MOBILITY>
|
||||
<RANDOM_UE_DISTRIBUTION>
|
||||
<NUMBER_OF_NODES>1</NUMBER_OF_NODES>
|
||||
</RANDOM_UE_DISTRIBUTION>
|
||||
<UE_MOBILITY_TYPE>STATIC</UE_MOBILITY_TYPE>
|
||||
</UE_MOBILITY>
|
||||
<eNB_MOBILITY>
|
||||
<eNB_INITIAL_DISTRIBUTION>random</eNB_INITIAL_DISTRIBUTION>
|
||||
<RANDOM_eNB_DISTRIBUTION>
|
||||
<NUMBER_OF_CELLS>1</NUMBER_OF_CELLS>
|
||||
</RANDOM_eNB_DISTRIBUTION>
|
||||
<eNB_MOBILITY_TYPE>STATIC</eNB_MOBILITY_TYPE>
|
||||
</eNB_MOBILITY>
|
||||
</MOBILITY>
|
||||
</TOPOLOGY_CONFIG>
|
||||
|
||||
<APPLICATION_CONFIG>
|
||||
|
||||
<PREDEFINED_TRAFFIC>
|
||||
<SOURCE_ID>0</SOURCE_ID>
|
||||
<APPLICATION_TYPE>scbr</APPLICATION_TYPE>
|
||||
<DESTINATION_ID>1</DESTINATION_ID>
|
||||
<FLOW_START_ms>100</FLOW_START_ms>
|
||||
<FLOW_DURATION_ms>55000</FLOW_DURATION_ms>
|
||||
</PREDEFINED_TRAFFIC>
|
||||
|
||||
<!-- UL -->
|
||||
<!-- <PREDEFINED_TRAFFIC>
|
||||
<SOURCE_ID>1</SOURCE_ID>
|
||||
<FLOW_START_ms>200</FLOW_START_ms>
|
||||
<FLOW_DURATION_ms>600</FLOW_DURATION_ms>
|
||||
<APPLICATION_TYPE>scbr</APPLICATION_TYPE>
|
||||
<DESTINATION_ID>0</DESTINATION_ID>
|
||||
</PREDEFINED_TRAFFIC>
|
||||
-->
|
||||
<CUSTOMIZED_TRAFFIC>
|
||||
<SOURCE_ID>1</SOURCE_ID>
|
||||
<TRANSPORT_PROTOCOL>udp</TRANSPORT_PROTOCOL>
|
||||
<FLOW_START_ms>100</FLOW_START_ms>
|
||||
<FLOW_DURATION_ms>55000</FLOW_DURATION_ms>
|
||||
<IP_VERSION>ipv4</IP_VERSION>
|
||||
<DESTINATION_ID>0</DESTINATION_ID>
|
||||
<IDT_DIST>uniform</IDT_DIST>
|
||||
<IDT_MIN_ms>1000</IDT_MIN_ms>
|
||||
<IDT_MAX_ms>10000</IDT_MAX_ms>
|
||||
<SIZE_DIST>uniform</SIZE_DIST>
|
||||
<SIZE_MIN_byte>100</SIZE_MIN_byte>
|
||||
<SIZE_MAX_byte>1000</SIZE_MAX_byte>
|
||||
</CUSTOMIZED_TRAFFIC>
|
||||
|
||||
</APPLICATION_CONFIG>
|
||||
|
||||
<EMULATION_CONFIG>
|
||||
<EMULATION_TIME_ms>60000</EMULATION_TIME_ms> <!--set to infinity-->
|
||||
<CURVE>disable</CURVE>
|
||||
<PERFORMANCE_METRICS>
|
||||
<THROUGHPUT>enable</THROUGHPUT>
|
||||
<LATENCY>enable</LATENCY>
|
||||
<LOSS_RATE>enable</LOSS_RATE>
|
||||
</PERFORMANCE_METRICS>
|
||||
<LOG> <!-- set the global log level -->
|
||||
<LEVEL>info</LEVEL>
|
||||
<VERBOSITY>low</VERBOSITY>
|
||||
</LOG>
|
||||
<SEED_VALUE>2013</SEED_VALUE> <!-- value 0 means randomly generated by OAI -->
|
||||
|
||||
</EMULATION_CONFIG>
|
||||
|
||||
<PROFILE>CBA_1</PROFILE>
|
||||
|
||||
</OAI_EMULATION>
|
||||
@@ -1,66 +0,0 @@
|
||||
<OAI_EMULATION>
|
||||
<TOPOLOGY_CONFIG>
|
||||
<AREA>
|
||||
<X_m>500</X_m>
|
||||
<Y_m>500</Y_m>
|
||||
</AREA>
|
||||
<MOBILITY>
|
||||
<UE_MOBILITY>
|
||||
<RANDOM_UE_DISTRIBUTION>
|
||||
<NUMBER_OF_NODES>3</NUMBER_OF_NODES>
|
||||
</RANDOM_UE_DISTRIBUTION>
|
||||
<UE_MOBILITY_TYPE>STATIC</UE_MOBILITY_TYPE> <!-- STATIC -->
|
||||
</UE_MOBILITY>
|
||||
<eNB_MOBILITY>
|
||||
<eNB_INITIAL_DISTRIBUTION>random</eNB_INITIAL_DISTRIBUTION>
|
||||
<RANDOM_eNB_DISTRIBUTION>
|
||||
<NUMBER_OF_CELLS>1</NUMBER_OF_CELLS>
|
||||
</RANDOM_eNB_DISTRIBUTION>
|
||||
<eNB_MOBILITY_TYPE>STATIC</eNB_MOBILITY_TYPE>
|
||||
</eNB_MOBILITY>
|
||||
</MOBILITY>
|
||||
</TOPOLOGY_CONFIG>
|
||||
<APPLICATION_CONFIG>
|
||||
|
||||
|
||||
<!-- Basic configuration of a customized traffic : one state-->
|
||||
|
||||
|
||||
<CUSTOMIZED_TRAFFIC>
|
||||
<SOURCE_ID>0</SOURCE_ID>
|
||||
<TRANSPORT_PROTOCOL>tcp</TRANSPORT_PROTOCOL> <!-- OPTIONS: tcp (default), udp -->
|
||||
<IP_VERSION>ipv4</IP_VERSION> <!-- OPTIONS: ipv4 (default), ipv6 -->
|
||||
<DESTINATION_ID>1:3</DESTINATION_ID>
|
||||
<BACKGROUND_TRAFFIC>disable</BACKGROUND_TRAFFIC> <!-- options: enable, disable. If enable, it generates a background traffic corresponding to the traffic direction-->
|
||||
<AGGREGATION_LEVEL>1</AGGREGATION_LEVEL> <!-- options: default=1, the number of traffic to aggregate-->
|
||||
<IDT_DIST>uniform</IDT_DIST> <!-- available distributions: none (default), uniform, poission, gaussian, exponential,pareto, cauchy,fixed, weibull, gammav-->
|
||||
<IDT_MIN_ms>30</IDT_MIN_ms> <!--Minimum IDT values in milliseconds-->
|
||||
<IDT_MAX_ms>50</IDT_MAX_ms> <!--MAximum IDT values in milliseconds-->
|
||||
<SIZE_DIST>uniform</SIZE_DIST> <!-- available distributions: none (default), uniform, poission, gaussian, exponential,pareto, cauchy,fixed, weibull, gammav-->
|
||||
<SIZE_MIN_byte>512</SIZE_MIN_byte> <!--Minimum PAYLOAD size values in bytes-->
|
||||
<SIZE_MAX_byte>1024</SIZE_MAX_byte> <!--MAximum PAYLOAD size values in bytes-->
|
||||
</CUSTOMIZED_TRAFFIC>
|
||||
|
||||
|
||||
</APPLICATION_CONFIG>
|
||||
|
||||
<EMULATION_CONFIG>
|
||||
<EMULATION_TIME_ms>10000</EMULATION_TIME_ms> <!--if 0 set to infinity-->
|
||||
<CURVE>enabled</CURVE> <!-- option: enabled, disabled. If CURVE is enabled, graphes are ploted in real time (UL and DL) of WOD and throughput measurement for each packet -->
|
||||
<BACKGROUND_STATS>enable</BACKGROUND_STATS> <!-- option: enable, disable. If enable, it allows to ptrint BACKGROUNS statistics: Nb packets, throughputs,etc-->
|
||||
<PERFORMANCE_METRICS>
|
||||
<THROUGHPUT>enable</THROUGHPUT> <!-- option: enable, disable. If enable, throughput measurements are plotted in real time-->
|
||||
<LATENCY>enable</LATENCY> <!-- option: enable, disable. If enable, latency measurements are plotted in real time-->
|
||||
<OWD_RADIO_ACCESS>enable</OWD_RADIO_ACCESS> <!-- option: enable, disable. If enable owd curve shows the one way radio access delay, else it shows end to end owd -->
|
||||
</PERFORMANCE_METRICS>
|
||||
<LOG> <!-- set the global log level -->
|
||||
<LEVEL>debug</LEVEL>
|
||||
<INTERVAL>1</INTERVAL>
|
||||
</LOG>
|
||||
<SEED_VALUE>1234</SEED_VALUE> <!-- value 0 means randomly generated by OAI -->
|
||||
|
||||
</EMULATION_CONFIG>
|
||||
|
||||
<PROFILE>OTG_2</PROFILE>
|
||||
</OAI_EMULATION>
|
||||
|
||||
@@ -1,67 +0,0 @@
|
||||
<OAI_EMULATION>
|
||||
<TOPOLOGY_CONFIG>
|
||||
<AREA>
|
||||
<X_m>500</X_m>
|
||||
<Y_m>500</Y_m>
|
||||
</AREA>
|
||||
<MOBILITY>
|
||||
<UE_MOBILITY>
|
||||
<RANDOM_UE_DISTRIBUTION>
|
||||
<NUMBER_OF_NODES>1</NUMBER_OF_NODES>
|
||||
</RANDOM_UE_DISTRIBUTION>
|
||||
<UE_MOBILITY_TYPE>STATIC</UE_MOBILITY_TYPE> <!-- STATIC -->
|
||||
</UE_MOBILITY>
|
||||
<eNB_MOBILITY>
|
||||
<eNB_INITIAL_DISTRIBUTION>random</eNB_INITIAL_DISTRIBUTION>
|
||||
<RANDOM_eNB_DISTRIBUTION>
|
||||
<NUMBER_OF_CELLS>1</NUMBER_OF_CELLS>
|
||||
</RANDOM_eNB_DISTRIBUTION>
|
||||
<eNB_MOBILITY_TYPE>STATIC</eNB_MOBILITY_TYPE>
|
||||
</eNB_MOBILITY>
|
||||
</MOBILITY>
|
||||
</TOPOLOGY_CONFIG>
|
||||
<APPLICATION_CONFIG>
|
||||
|
||||
|
||||
<!-- Basic configuration of a customized traffic : one state-->
|
||||
|
||||
|
||||
<CUSTOMIZED_TRAFFIC>
|
||||
<SOURCE_ID>0</SOURCE_ID>
|
||||
<TRANSPORT_PROTOCOL>tcp</TRANSPORT_PROTOCOL> <!-- OPTIONS: tcp (default), udp -->
|
||||
<IP_VERSION>ipv4</IP_VERSION> <!-- OPTIONS: ipv4 (default), ipv6 -->
|
||||
<DESTINATION_ID>1</DESTINATION_ID>
|
||||
<BACKGROUND_TRAFFIC>disable</BACKGROUND_TRAFFIC> <!-- options: enable, disable. If enable, it generates a background traffic corresponding to the traffic direction-->
|
||||
<AGGREGATION_LEVEL>1</AGGREGATION_LEVEL> <!-- options: default=1, the number of traffic to aggregate-->
|
||||
<IDT_DIST>uniform</IDT_DIST> <!-- available distributions: none (default), uniform, poission, gaussian, exponential,pareto, cauchy,fixed, weibull, gammav-->
|
||||
<IDT_MIN_ms>500</IDT_MIN_ms> <!--Minimum IDT values in milliseconds-->
|
||||
<IDT_MAX_ms>500</IDT_MAX_ms> <!--Minimum IDT values in milliseconds-->
|
||||
<SIZE_DIST>uniform</SIZE_DIST> <!-- available distributions: none (default), uniform, poission, gaussian, exponential,pareto, cauchy,fixed, weibull, gammav-->
|
||||
<SIZE_MIN_byte>1000</SIZE_MIN_byte> <!--Minimum PAYLOAD size values in bytes-->
|
||||
<SIZE_MAX_byte>1500</SIZE_MAX_byte> <!--MAximum PAYLOAD size values in bytes-->
|
||||
</CUSTOMIZED_TRAFFIC>
|
||||
|
||||
|
||||
|
||||
</APPLICATION_CONFIG>
|
||||
|
||||
<EMULATION_CONFIG>
|
||||
<EMULATION_TIME_ms>0</EMULATION_TIME_ms> <!--if 0 set to infinity-->
|
||||
<CURVE>enable</CURVE> <!-- option: enabled, disabled. If CURVE is enabled, graphes are ploted in real time (UL and DL) of WOD and throughput measurement for each packet -->
|
||||
<BACKGROUND_STATS>enable</BACKGROUND_STATS> <!-- option: enable, disable. If enable, it allows to ptrint BACKGROUNS statistics: Nb packets, throughputs,etc-->
|
||||
<PERFORMANCE_METRICS>
|
||||
<THROUGHPUT>enable</THROUGHPUT> <!-- option: enable, disable. If enable, throughput measurements are plotted in real time-->
|
||||
<LATENCY>enable</LATENCY> <!-- option: enable, disable. If enable, latency measurements are plotted in real time-->
|
||||
<OWD_RADIO_ACCESS>disable</OWD_RADIO_ACCESS> <!-- option: enable, disable. If enable owd curve shows the one way radio access delay, else it shows end to end owd -->
|
||||
</PERFORMANCE_METRICS>
|
||||
<LOG> <!-- set the global log level -->
|
||||
<LEVEL>trace</LEVEL>
|
||||
<INTERVAL>1</INTERVAL>
|
||||
</LOG>
|
||||
<SEED_VALUE>1234</SEED_VALUE> <!-- value 0 means randomly generated by OAI -->
|
||||
|
||||
</EMULATION_CONFIG>
|
||||
|
||||
<PROFILE>OTG_2</PROFILE>
|
||||
</OAI_EMULATION>
|
||||
|
||||
@@ -1,84 +0,0 @@
|
||||
<OAI_EMULATION>
|
||||
<TOPOLOGY_CONFIG>
|
||||
<AREA>
|
||||
<X_m>500</X_m>
|
||||
<Y_m>500</Y_m>
|
||||
</AREA>
|
||||
<MOBILITY>
|
||||
<UE_MOBILITY>
|
||||
<RANDOM_UE_DISTRIBUTION>
|
||||
<NUMBER_OF_NODES>1</NUMBER_OF_NODES>
|
||||
</RANDOM_UE_DISTRIBUTION>
|
||||
<UE_MOBILITY_TYPE>STATIC</UE_MOBILITY_TYPE> <!-- STATIC -->
|
||||
</UE_MOBILITY>
|
||||
<eNB_MOBILITY>
|
||||
<eNB_INITIAL_DISTRIBUTION>random</eNB_INITIAL_DISTRIBUTION>
|
||||
<RANDOM_eNB_DISTRIBUTION>
|
||||
<NUMBER_OF_CELLS>1</NUMBER_OF_CELLS>
|
||||
</RANDOM_eNB_DISTRIBUTION>
|
||||
<eNB_MOBILITY_TYPE>STATIC</eNB_MOBILITY_TYPE>
|
||||
</eNB_MOBILITY>
|
||||
</MOBILITY>
|
||||
</TOPOLOGY_CONFIG>
|
||||
<APPLICATION_CONFIG>
|
||||
|
||||
<CUSTOMIZED_TRAFFIC>
|
||||
<PROB_OFF_PE>0.6</PROB_OFF_PE> <!-- Probability threshold to move from OFF to PE state. -->
|
||||
<HOLDING_TIME_OFF_PE>10</HOLDING_TIME_OFF_PE> <!--Holding time in OFF state before moving to PE -->
|
||||
<HOLDING_TIME_PE_OFF>200</HOLDING_TIME_PE_OFF> <!--Holding time in PE state before moving to OFF -->
|
||||
<SOURCE_ID>1</SOURCE_ID>
|
||||
<TRANSPORT_PROTOCOL>tcp</TRANSPORT_PROTOCOL> <!-- OPTIONS: tcp (default), udp -->
|
||||
<IP_VERSION>ipv4</IP_VERSION> <!-- OPTIONS: ipv4 (default), ipv6 -->
|
||||
<DESTINATION_ID>0</DESTINATION_ID>
|
||||
<BACKGROUND_TRAFFIC>enable</BACKGROUND_TRAFFIC> <!-- options: enable, disable. If enable, it generates a background traffic corresponding to the traffic direction-->
|
||||
<AGGREGATION_LEVEL>1</AGGREGATION_LEVEL> <!-- options: default=1, the number of traffic to aggregate-->
|
||||
<IDT_DIST>uniform</IDT_DIST> <!-- available distributions: none (default), uniform, poission, gaussian, exponential,pareto, cauchy,fixed, weibull, gammav-->
|
||||
<IDT_MIN_ms>80</IDT_MIN_ms> <!--Minimum IDT values in milliseconds-->
|
||||
<IDT_MAX_ms>100</IDT_MAX_ms> <!--MAximum IDT values in milliseconds-->
|
||||
<SIZE_DIST>uniform</SIZE_DIST> <!-- available distributions: none (default), uniform, poission, gaussian, exponential,pareto, cauchy,fixed, weibull, gammav-->
|
||||
<SIZE_MIN_byte>100</SIZE_MIN_byte> <!--Minimum PAYLOAD size values in bytes-->
|
||||
<SIZE_MAX_byte>200</SIZE_MAX_byte> <!--MAximum PAYLOAD size values in bytes-->
|
||||
</CUSTOMIZED_TRAFFIC>
|
||||
|
||||
|
||||
|
||||
<CUSTOMIZED_TRAFFIC>
|
||||
<PROB_OFF_PE>0.6</PROB_OFF_PE> <!-- Probability threshold to move from OFF to PE state. -->
|
||||
<HOLDING_TIME_OFF_PE>10</HOLDING_TIME_OFF_PE> <!--Holding time in OFF state before moving to PE -->
|
||||
<HOLDING_TIME_PE_OFF>200</HOLDING_TIME_PE_OFF> <!--Holding time in PE state before moving to OFF -->
|
||||
<SOURCE_ID>0</SOURCE_ID>
|
||||
<TRANSPORT_PROTOCOL>tcp</TRANSPORT_PROTOCOL> <!-- OPTIONS: tcp (default), udp -->
|
||||
<IP_VERSION>ipv4</IP_VERSION> <!-- OPTIONS: ipv4 (default), ipv6 -->
|
||||
<DESTINATION_ID>1</DESTINATION_ID>
|
||||
<BACKGROUND_TRAFFIC>enable</BACKGROUND_TRAFFIC> <!-- options: enable, disable. If enable, it generates a background traffic corresponding to the traffic direction-->
|
||||
<AGGREGATION_LEVEL>1</AGGREGATION_LEVEL> <!-- options: default=1, the number of traffic to aggregate-->
|
||||
<IDT_DIST>uniform</IDT_DIST> <!-- available distributions: none (default), uniform, poission, gaussian, exponential,pareto, cauchy,fixed, weibull, gammav-->
|
||||
<IDT_MIN_ms>1000</IDT_MIN_ms> <!--Minimum IDT values in milliseconds-->
|
||||
<IDT_MAX_ms>2000</IDT_MAX_ms> <!--MAximum IDT values in milliseconds-->
|
||||
<SIZE_DIST>uniform</SIZE_DIST> <!-- available distributions: none (default), uniform, poission, gaussian, exponential,pareto, cauchy,fixed, weibull, gammav-->
|
||||
<SIZE_MIN_byte>100</SIZE_MIN_byte> <!--Minimum PAYLOAD size values in bytes-->
|
||||
<SIZE_MAX_byte>200</SIZE_MAX_byte> <!--MAximum PAYLOAD size values in bytes-->
|
||||
</CUSTOMIZED_TRAFFIC>
|
||||
|
||||
</APPLICATION_CONFIG>
|
||||
|
||||
<EMULATION_CONFIG>
|
||||
<EMULATION_TIME_ms>100000</EMULATION_TIME_ms> <!--if 0 set to infinity-->
|
||||
<CURVE>enable</CURVE> <!-- option: enabled, disabled. If CURVE is enabled, graphes are ploted in real time (UL and DL) of WOD and throughput measurement for each packet -->
|
||||
<BACKGROUND_STATS>enable</BACKGROUND_STATS> <!-- option: enable, disable. If enable, it allows to ptrint BACKGROUNS statistics: Nb packets, throughputs,etc-->
|
||||
<PERFORMANCE_METRICS>
|
||||
<THROUGHPUT>enable</THROUGHPUT> <!-- option: enable, disable. If enable, throughput measurements are plotted in real time-->
|
||||
<LATENCY>enable</LATENCY> <!-- option: enable, disable. If enable, latency measurements are plotted in real time-->
|
||||
<OWD_RADIO_ACCESS>enable</OWD_RADIO_ACCESS> <!-- option: enable, disable. If enable owd curve shows the one way radio access delay, else it shows end to end owd -->
|
||||
</PERFORMANCE_METRICS>
|
||||
<LOG> <!-- set the global log level -->
|
||||
<LEVEL>trace</LEVEL>
|
||||
<INTERVAL>1</INTERVAL>
|
||||
</LOG>
|
||||
<SEED_VALUE>1234</SEED_VALUE> <!-- value 0 means randomly generated by OAI -->
|
||||
|
||||
</EMULATION_CONFIG>
|
||||
|
||||
<PROFILE>OTG_2</PROFILE>
|
||||
</OAI_EMULATION>
|
||||
|
||||
@@ -1,70 +0,0 @@
|
||||
<OAI_EMULATION>
|
||||
<TOPOLOGY_CONFIG>
|
||||
<AREA>
|
||||
<X_m>500</X_m>
|
||||
<Y_m>500</Y_m>
|
||||
</AREA>
|
||||
<MOBILITY>
|
||||
<UE_MOBILITY>
|
||||
<RANDOM_UE_DISTRIBUTION>
|
||||
<NUMBER_OF_NODES>3</NUMBER_OF_NODES>
|
||||
</RANDOM_UE_DISTRIBUTION>
|
||||
<UE_MOBILITY_TYPE>STATIC</UE_MOBILITY_TYPE> <!-- STATIC -->
|
||||
</UE_MOBILITY>
|
||||
<eNB_MOBILITY>
|
||||
<eNB_INITIAL_DISTRIBUTION>random</eNB_INITIAL_DISTRIBUTION>
|
||||
<RANDOM_eNB_DISTRIBUTION>
|
||||
<NUMBER_OF_CELLS>1</NUMBER_OF_CELLS>
|
||||
</RANDOM_eNB_DISTRIBUTION>
|
||||
<eNB_MOBILITY_TYPE>STATIC</eNB_MOBILITY_TYPE>
|
||||
</eNB_MOBILITY>
|
||||
</MOBILITY>
|
||||
</TOPOLOGY_CONFIG>
|
||||
<APPLICATION_CONFIG>
|
||||
|
||||
|
||||
|
||||
<!-- High complexity configuration of a customized traffic with 2 states: OFF, PU and PE-->
|
||||
<!-- We configure OFF and PE holding time and off_pe, off_pu probabilities. They will be preconfigured automatically -->
|
||||
<CUSTOMIZED_TRAFFIC>
|
||||
<PU_SIZE_PKTS>70</PU_SIZE_PKTS> <!-- PU state packet size in bytes-->
|
||||
<PROB_OFF_PU>0.1</PROB_OFF_PU> <!-- Probability threshold to move from OFF to PU state. -->
|
||||
<PROB_OFF_PE>0.8</PROB_OFF_PE> <!-- Probability threshold to move from OFF to PE state. -->
|
||||
<HOLDING_TIME_OFF_PU>50</HOLDING_TIME_OFF_PU> <!--Holding time in OFF state before moving to PU -->
|
||||
<HOLDING_TIME_OFF_PE>13</HOLDING_TIME_OFF_PE> <!--Holding time in OFF state before moving to PE -->
|
||||
<HOLDING_TIME_PE_OFF>230</HOLDING_TIME_PE_OFF> <!--Holding time in PE state before moving to OFF -->
|
||||
<SOURCE_ID>1:3</SOURCE_ID>
|
||||
<TRANSPORT_PROTOCOL>udp</TRANSPORT_PROTOCOL> <!-- OPTIONS: tcp (default), udp -->
|
||||
<IP_VERSION>ipv6</IP_VERSION> <!-- OPTIONS: ipv4 (default), ipv6 -->
|
||||
<DESTINATION_ID>0</DESTINATION_ID>
|
||||
<BACKGROUND_TRAFFIC>enable</BACKGROUND_TRAFFIC> <!-- options: enable, disable. If enable, it generates a background traffic corresponding to the traffic direction-->
|
||||
<AGGREGATION_LEVEL>1</AGGREGATION_LEVEL> <!-- options: default=1, the number of traffic to aggregate-->
|
||||
<IDT_DIST>uniform</IDT_DIST> <!-- available distributions: none (default), uniform, poission, gaussian, exponential,pareto, cauchy,fixed, weibull, gammav-->
|
||||
<IDT_STANDARD_DEVIATION>4.5</IDT_STANDARD_DEVIATION> <!-- Standard deviation-->
|
||||
<SIZE_DIST>pareto</SIZE_DIST> <!-- available distributions: none (default), uniform, poission, gaussian, exponential,pareto, cauchy,fixed, weibull, gammav-->
|
||||
<SIZE_SCALE>0.5</SIZE_SCALE> <!-- Scale-->
|
||||
<SIZE_SHAPE>30</SIZE_SHAPE> <!-- Shape-->
|
||||
</CUSTOMIZED_TRAFFIC>
|
||||
|
||||
</APPLICATION_CONFIG>
|
||||
|
||||
<EMULATION_CONFIG>
|
||||
<EMULATION_TIME_ms>1000</EMULATION_TIME_ms> <!--if 0 set to infinity-->
|
||||
<CURVE>enable</CURVE> <!-- option: enabled, disabled. If CURVE is enabled, graphes are ploted in real time (UL and DL) of WOD and throughput measurement for each packet -->
|
||||
<BACKGROUND_STATS>enable</BACKGROUND_STATS> <!-- option: enable, disable. If enable, it allows to ptrint BACKGROUNS statistics: Nb packets, throughputs,etc-->
|
||||
<PERFORMANCE_METRICS>
|
||||
<THROUGHPUT>enable</THROUGHPUT> <!-- option: enable, disable. If enable, throughput measurements are plotted in real time-->
|
||||
<LATENCY>enable</LATENCY> <!-- option: enable, disable. If enable, latency measurements are plotted in real time-->
|
||||
<OWD_RADIO_ACCESS>enable</OWD_RADIO_ACCESS> <!-- option: enable, disable. If enable owd curve shows the one way radio access delay, else it shows end to end owd -->
|
||||
</PERFORMANCE_METRICS>
|
||||
<LOG> <!-- set the global log level -->
|
||||
<LEVEL>trace</LEVEL>
|
||||
<INTERVAL>1</INTERVAL>
|
||||
</LOG>
|
||||
<SEED_VALUE>1234</SEED_VALUE> <!-- value 0 means randomly generated by OAI -->
|
||||
|
||||
</EMULATION_CONFIG>
|
||||
|
||||
<PROFILE>OTG_2</PROFILE>
|
||||
</OAI_EMULATION>
|
||||
|
||||
@@ -1,71 +0,0 @@
|
||||
<OAI_EMULATION>
|
||||
<TOPOLOGY_CONFIG>
|
||||
<AREA>
|
||||
<X_m>500</X_m>
|
||||
<Y_m>500</Y_m>
|
||||
</AREA>
|
||||
<MOBILITY>
|
||||
<UE_MOBILITY>
|
||||
<RANDOM_UE_DISTRIBUTION>
|
||||
<NUMBER_OF_NODES>3</NUMBER_OF_NODES>
|
||||
</RANDOM_UE_DISTRIBUTION>
|
||||
<UE_MOBILITY_TYPE>STATIC</UE_MOBILITY_TYPE> <!-- STATIC -->
|
||||
</UE_MOBILITY>
|
||||
<eNB_MOBILITY>
|
||||
<eNB_INITIAL_DISTRIBUTION>random</eNB_INITIAL_DISTRIBUTION>
|
||||
<RANDOM_eNB_DISTRIBUTION>
|
||||
<NUMBER_OF_CELLS>1</NUMBER_OF_CELLS>
|
||||
</RANDOM_eNB_DISTRIBUTION>
|
||||
<eNB_MOBILITY_TYPE>STATIC</eNB_MOBILITY_TYPE>
|
||||
</eNB_MOBILITY>
|
||||
</MOBILITY>
|
||||
</TOPOLOGY_CONFIG>
|
||||
<APPLICATION_CONFIG>
|
||||
|
||||
|
||||
|
||||
<!-- High complexity configuration of a customized traffic with 2 states: OFF, ED and PE-->
|
||||
<!-- We configure OFF and PE holding time and off_pe, off_ED probabilities. They will be preconfigured automatically -->
|
||||
<CUSTOMIZED_TRAFFIC>
|
||||
<ED_SIZE_PKTS>70</ED_SIZE_PKTS>
|
||||
<PROB_OFF_ED>0.1</PROB_OFF_ED>
|
||||
<PROB_OFF_PE>0.2</PROB_OFF_PE> <!-- Probability threshold to move from OFF to PE state. -->
|
||||
<HOLDING_TIME_OFF_ED>100</HOLDING_TIME_OFF_ED> <!--Holding time in OFF state before moving to ED -->
|
||||
<HOLDING_TIME_OFF_PE>200</HOLDING_TIME_OFF_PE> <!--Holding time in OFF state before moving to PE -->
|
||||
<HOLDING_TIME_PE_OFF>230</HOLDING_TIME_PE_OFF> <!--Holding time in PE state before moving to OFF -->
|
||||
<SOURCE_ID>1:3</SOURCE_ID>
|
||||
<TRANSPORT_PROTOCOL>udp</TRANSPORT_PROTOCOL> <!-- OPTIONS: tcp (default), udp -->
|
||||
<IP_VERSION>ipv6</IP_VERSION> <!-- OPTIONS: ipv4 (default), ipv6 -->
|
||||
<DESTINATION_ID>0</DESTINATION_ID>
|
||||
<BACKGROUND_TRAFFIC>enable</BACKGROUND_TRAFFIC> <!-- options: enable, disable. If enable, it generates a background traffic corresponding to the traffic direction-->
|
||||
<AGGREGATION_LEVEL>1</AGGREGATION_LEVEL> <!-- options: default=1, the number of traffic to aggregate-->
|
||||
<IDT_DIST>uniform</IDT_DIST> <!-- available distributions: none (default), uniform, poission, gaussian, exponential,pareto, cauchy,fixed, weibull, gammav-->
|
||||
<IDT_MIN_ms>100</IDT_MIN_ms> <!--Minimum IDT values in milliseconds-->
|
||||
<IDT_MAX_ms>200</IDT_MAX_ms> <!--MAximum IDT values in milliseconds-->
|
||||
<SIZE_DIST>pareto</SIZE_DIST> <!-- available distributions: none (default), uniform, poission, gaussian, exponential,pareto, cauchy,fixed, weibull, gammav-->
|
||||
<SIZE_SCALE>0.5</SIZE_SCALE> <!-- Scale-->
|
||||
<SIZE_SHAPE>30</SIZE_SHAPE> <!-- Shape-->
|
||||
</CUSTOMIZED_TRAFFIC>
|
||||
|
||||
</APPLICATION_CONFIG>
|
||||
|
||||
<EMULATION_CONFIG>
|
||||
<EMULATION_TIME_ms>3000</EMULATION_TIME_ms> <!--if 0 set to infinity-->
|
||||
<CURVE>enable</CURVE> <!-- option: enabled, disabled. If CURVE is enabled, graphes are ploted in real time (UL and DL) of WOD and throughput measurement for each packet -->
|
||||
<BACKGROUND_STATS>enable</BACKGROUND_STATS> <!-- option: enable, disable. If enable, it allows to ptrint BACKGROUNS statistics: Nb packets, throughputs,etc-->
|
||||
<PERFORMANCE_METRICS>
|
||||
<THROUGHPUT>enable</THROUGHPUT> <!-- option: enable, disable. If enable, throughput measurements are plotted in real time-->
|
||||
<LATENCY>enable</LATENCY> <!-- option: enable, disable. If enable, latency measurements are plotted in real time-->
|
||||
<OWD_RADIO_ACCESS>enable</OWD_RADIO_ACCESS> <!-- option: enable, disable. If enable owd curve shows the one way radio access delay, else it shows end to end owd -->
|
||||
</PERFORMANCE_METRICS>
|
||||
<LOG> <!-- set the global log level -->
|
||||
<LEVEL>trace</LEVEL>
|
||||
<INTERVAL>1</INTERVAL>
|
||||
</LOG>
|
||||
<SEED_VALUE>1234</SEED_VALUE> <!-- value 0 means randomly generated by OAI -->
|
||||
|
||||
</EMULATION_CONFIG>
|
||||
|
||||
<PROFILE>OTG_2</PROFILE>
|
||||
</OAI_EMULATION>
|
||||
|
||||
@@ -1,55 +0,0 @@
|
||||
<OAI_EMULATION>
|
||||
<TOPOLOGY_CONFIG>
|
||||
<AREA>
|
||||
<X_m>500</X_m>
|
||||
<Y_m>500</Y_m>
|
||||
</AREA>
|
||||
<MOBILITY>
|
||||
<UE_MOBILITY>
|
||||
<RANDOM_UE_DISTRIBUTION>
|
||||
<NUMBER_OF_NODES>3</NUMBER_OF_NODES>
|
||||
</RANDOM_UE_DISTRIBUTION>
|
||||
<UE_MOBILITY_TYPE>STATIC</UE_MOBILITY_TYPE> <!-- STATIC -->
|
||||
</UE_MOBILITY>
|
||||
<eNB_MOBILITY>
|
||||
<eNB_INITIAL_DISTRIBUTION>random</eNB_INITIAL_DISTRIBUTION>
|
||||
<RANDOM_eNB_DISTRIBUTION>
|
||||
<NUMBER_OF_CELLS>1</NUMBER_OF_CELLS>
|
||||
</RANDOM_eNB_DISTRIBUTION>
|
||||
<eNB_MOBILITY_TYPE>STATIC</eNB_MOBILITY_TYPE>
|
||||
</eNB_MOBILITY>
|
||||
</MOBILITY>
|
||||
</TOPOLOGY_CONFIG>
|
||||
<APPLICATION_CONFIG>
|
||||
|
||||
<!-- Basic configuration of a preconfigured M2M traffic with 4 states: OFF, PU, ED and PE-->
|
||||
<PREDEFINED_TRAFFIC>
|
||||
<SOURCE_ID>0</SOURCE_ID>
|
||||
<APPLICATION_TYPE>m2m_traffic</APPLICATION_TYPE> <!-- options: scbr,mcbr,bcbr, gaming_OA, gaming_TF, m2m_AP, m2m_BR ,m2m_traffic -->
|
||||
<BACKGROUND_TRAFFIC>enable</BACKGROUND_TRAFFIC> <!-- options: enable, disable. If enable, it generates a background traffic corresponding to the traffic direction-->
|
||||
<AGGREGATION_LEVEL>1</AGGREGATION_LEVEL> <!-- options: default=1, the number of traffic to aggregate-->
|
||||
<DESTINATION_ID>1:3</DESTINATION_ID>
|
||||
</PREDEFINED_TRAFFIC>
|
||||
</APPLICATION_CONFIG>
|
||||
|
||||
|
||||
<EMULATION_CONFIG>
|
||||
<EMULATION_TIME_ms>5000</EMULATION_TIME_ms> <!--if 0 set to infinity-->
|
||||
<CURVE>enable</CURVE> <!-- option: enable, disable. If CURVE is enable, graphes are ploted in real time (UL and DL) of WOD and throughput measurement for each packet -->
|
||||
<BACKGROUND_STATS>enable</BACKGROUND_STATS> <!-- option: enable, disable. If enable, it allows to ptrint BACKGROUNS statistics: Nb packets, throughputs,etc-->
|
||||
<PERFORMANCE_METRICS>
|
||||
<THROUGHPUT>enable</THROUGHPUT> <!-- option: enable, disable. If enable, throughput measurements are plotted in real time-->
|
||||
<LATENCY>enable</LATENCY> <!-- option: enable, disable. If enable, latency measurements are plotted in real time-->
|
||||
<OWD_RADIO_ACESS>enable</OWD_RADIO_ACESS> <!-- option: enable, disable. If enable owd curve shows the one way radio access delay, else it shows end to end owd -->
|
||||
</PERFORMANCE_METRICS>
|
||||
<LOG> <!-- set the global log level -->
|
||||
<LEVEL>trace</LEVEL>
|
||||
<INTERVAL>1</INTERVAL>
|
||||
</LOG>
|
||||
<SEED_VALUE>1234</SEED_VALUE> <!-- value 0 means randomly generated by OAI -->
|
||||
|
||||
</EMULATION_CONFIG>
|
||||
|
||||
<PROFILE>OTG_2</PROFILE>
|
||||
</OAI_EMULATION>
|
||||
|
||||
@@ -1,77 +0,0 @@
|
||||
<OAI_EMULATION>
|
||||
<TOPOLOGY_CONFIG>
|
||||
<AREA>
|
||||
<X_m>500</X_m>
|
||||
<Y_m>500</Y_m>
|
||||
</AREA>
|
||||
<MOBILITY>
|
||||
<UE_MOBILITY>
|
||||
<RANDOM_UE_DISTRIBUTION>
|
||||
<NUMBER_OF_NODES>3</NUMBER_OF_NODES>
|
||||
</RANDOM_UE_DISTRIBUTION>
|
||||
<UE_MOBILITY_TYPE>STATIC</UE_MOBILITY_TYPE> <!-- STATIC -->
|
||||
</UE_MOBILITY>
|
||||
<eNB_MOBILITY>
|
||||
<eNB_INITIAL_DISTRIBUTION>random</eNB_INITIAL_DISTRIBUTION>
|
||||
<RANDOM_eNB_DISTRIBUTION>
|
||||
<NUMBER_OF_CELLS>1</NUMBER_OF_CELLS>
|
||||
</RANDOM_eNB_DISTRIBUTION>
|
||||
<eNB_MOBILITY_TYPE>STATIC</eNB_MOBILITY_TYPE>
|
||||
</eNB_MOBILITY>
|
||||
</MOBILITY>
|
||||
</TOPOLOGY_CONFIG>
|
||||
<APPLICATION_CONFIG>
|
||||
|
||||
|
||||
|
||||
<!-- High complexity configuration of a customized traffic with 3 states: OFF, ED, PU and PE-->
|
||||
<CUSTOMIZED_TRAFFIC>
|
||||
<SOURCE_ID>0</SOURCE_ID>
|
||||
<TRANSPORT_PROTOCOL>tcp</TRANSPORT_PROTOCOL>
|
||||
<IP_VERSION>ipv4</IP_VERSION>
|
||||
<DESTINATION_ID>1:3</DESTINATION_ID>
|
||||
<BACKGROUND_TRAFFIC>enable</BACKGROUND_TRAFFIC> <!-- options: enable, disable. If enable, it generates a background traffic corresponding to the traffic direction-->
|
||||
<AGGREGATION_LEVEL>1</AGGREGATION_LEVEL> <!-- options: default=1, the number of traffic to aggregate-->
|
||||
<IDT_DIST>uniform</IDT_DIST> <!-- available distributions: none (default), uniform, poission, gaussian, exponential,pareto, cauchy,fixed, weibull, gammav-->
|
||||
<IDT_MIN_ms>400</IDT_MIN_ms> <!--Minimum IDT values in milliseconds-->
|
||||
<IDT_MAX_ms>500</IDT_MAX_ms> <!--Maximum IDT values in milliseconds-->
|
||||
<SIZE_DIST>uniform</SIZE_DIST> <!-- available distributions: none (default), uniform, poission, gaussian, exponential,pareto, cauchy,fixed, weibull, gammav-->
|
||||
<SIZE_MIN_byte>80</SIZE_MIN_byte> <!--Minimum PAYLOAD size in bytes-->
|
||||
<SIZE_MAX_byte>150</SIZE_MAX_byte> <!--Maximum PAYLOAD size in bytes-->
|
||||
<PU_SIZE_PKTS>60</PU_SIZE_PKTS> <!-- PU state packet size in bytes-->
|
||||
<ED_SIZE_PKTS>70</ED_SIZE_PKTS> <!-- ED state packet size in bytes-->
|
||||
<PROB_OFF_PU>0.2</PROB_OFF_PU> <!-- Probability threshold to move from OFF to PU state. -->
|
||||
<PROB_OFF_ED>0.1</PROB_OFF_ED> <!-- Probability threshold to move from OFF to ED state. -->
|
||||
<PROB_OFF_PE>0.2</PROB_OFF_PE> <!-- Probability threshold to move from OFF to PE state. -->
|
||||
<PROB_PU_ED>0.1</PROB_PU_ED> <!-- Probability threshold to move from PU to ED state. -->
|
||||
<PROB_PU_PE>0.3</PROB_PU_PE> <!-- Probability threshold to move from PU to PE state. -->
|
||||
<PROB_ED_PE>0.1</PROB_ED_PE> <!-- Probability threshold to move from ED to PE state. -->
|
||||
<PROB_ED_PU>0.2</PROB_ED_PU> <!-- Probability threshold to move from ED to PU state. -->
|
||||
<HOLDING_TIME_OFF_ED>100</HOLDING_TIME_OFF_ED> <!--Holding time in OFF state before moving to ED -->
|
||||
<HOLDING_TIME_OFF_PU>120</HOLDING_TIME_OFF_PU> <!--Holding time in OFF state before moving to PU -->
|
||||
<HOLDING_TIME_OFF_PE>150</HOLDING_TIME_OFF_PE> <!--Holding time in OFF state before moving to PE -->
|
||||
<HOLDING_TIME_PE_OFF>500</HOLDING_TIME_PE_OFF> <!--Holding time in PE state before moving to OFF -->
|
||||
</CUSTOMIZED_TRAFFIC>
|
||||
|
||||
</APPLICATION_CONFIG>
|
||||
|
||||
<EMULATION_CONFIG>
|
||||
<EMULATION_TIME_ms>0</EMULATION_TIME_ms> <!--if0 set to infinity-->
|
||||
<CURVE>enable</CURVE> <!-- option: enabled, disabled. If CURVE is enabled, graphes are ploted in real time (UL and DL) of WOD and throughput measurement for each packet -->
|
||||
<BACKGROUND_STATS>enable</BACKGROUND_STATS>
|
||||
<PERFORMANCE_METRICS>
|
||||
<THROUGHPUT>enable</THROUGHPUT>
|
||||
<LATENCY>enable</LATENCY>
|
||||
<OWD_RADIO_ACCESS>enable</OWD_RADIO_ACCESS> <!-- option: 0, 1. If 1 owd curve shows the one way radio access delay,else shows end to end owd -->
|
||||
</PERFORMANCE_METRICS>
|
||||
<LOG> <!-- set the global log level -->
|
||||
<LEVEL>debug</LEVEL>
|
||||
<INTERVAL>1</INTERVAL>
|
||||
</LOG>
|
||||
<SEED_VALUE>1234</SEED_VALUE> <!-- value 0 means randomly generated by OAI -->
|
||||
|
||||
</EMULATION_CONFIG>
|
||||
|
||||
<PROFILE>OTG_2</PROFILE>
|
||||
</OAI_EMULATION>
|
||||
|
||||
@@ -1,56 +0,0 @@
|
||||
|
||||
<OAI_EMULATION>
|
||||
<ENVIRONMENT_SYSTEM_CONFIG>
|
||||
<FADING>
|
||||
<LARGE_SCALE>free_space</LARGE_SCALE>
|
||||
<FREE_SPACE_MODEL_PARAMETERS>
|
||||
<PATHLOSS_EXPONENT>2</PATHLOSS_EXPONENT>
|
||||
<PATHLOSS_0_dB>-50</PATHLOSS_0_dB>
|
||||
</FREE_SPACE_MODEL_PARAMETERS>
|
||||
</FADING>
|
||||
|
||||
<ANTENNA>
|
||||
<eNB_ANTENNA>
|
||||
<RX_NOISE_LEVEL_dB>-90</RX_NOISE_LEVEL_dB>
|
||||
</eNB_ANTENNA>
|
||||
|
||||
<UE_ANTENNA>
|
||||
<RX_NOISE_LEVEL_dB>-90</RX_NOISE_LEVEL_dB>
|
||||
</UE_ANTENNA>
|
||||
</ANTENNA>
|
||||
</ENVIRONMENT_SYSTEM_CONFIG>
|
||||
|
||||
<TOPOLOGY_CONFIG>
|
||||
<AREA>
|
||||
<X_m>1000</X_m>
|
||||
<Y_m>1000</Y_m>
|
||||
</AREA>
|
||||
|
||||
<MOBILITY>
|
||||
<UE_MOBILITY>
|
||||
<UE_INITIAL_DISTRIBUTION>random</UE_INITIAL_DISTRIBUTION>
|
||||
<RANDOM_UE_DISTRIBUTION>
|
||||
<NUMBER_OF_NODES>2</NUMBER_OF_NODES>
|
||||
</RANDOM_UE_DISTRIBUTION>
|
||||
<UE_MOBILITY_TYPE>RWP</UE_MOBILITY_TYPE>
|
||||
</UE_MOBILITY>
|
||||
|
||||
<eNB_MOBILITY>
|
||||
<eNB_INITIAL_DISTRIBUTION>random</eNB_INITIAL_DISTRIBUTION>
|
||||
<RANDOM_eNB_DISTRIBUTION>
|
||||
<NUMBER_OF_CELLS>2</NUMBER_OF_CELLS>
|
||||
</RANDOM_eNB_DISTRIBUTION>
|
||||
<eNB_MOBILITY_TYPE>STATIC</eNB_MOBILITY_TYPE>
|
||||
</eNB_MOBILITY>
|
||||
</MOBILITY>
|
||||
</TOPOLOGY_CONFIG>
|
||||
|
||||
<EMULATION_CONFIG>
|
||||
<EMULATION_TIME_ms>0</EMULATION_TIME_ms>
|
||||
<LOG> <!-- set the global log level -->
|
||||
<LEVEL>debug</LEVEL>
|
||||
</LOG>
|
||||
</EMULATION_CONFIG>
|
||||
<PROFILE>OCM_OMG_1</PROFILE>
|
||||
</OAI_EMULATION>
|
||||
|
||||
@@ -1,87 +0,0 @@
|
||||
<OAI_EMULATION>
|
||||
<ENVIRONMENT_SYSTEM_CONFIG>
|
||||
<FADING>
|
||||
<FREE_SPACE_MODEL_PARAMETERS>
|
||||
<PATHLOSS_EXPONENT>2.0</PATHLOSS_EXPONENT>
|
||||
</FREE_SPACE_MODEL_PARAMETERS>
|
||||
<SMALL_SCALE>AWGN</SMALL_SCALE>
|
||||
</FADING>
|
||||
<SYSTEM_FREQUENCY_GHz>1.9</SYSTEM_FREQUENCY_GHz>
|
||||
</ENVIRONMENT_SYSTEM_CONFIG>
|
||||
|
||||
<TOPOLOGY_CONFIG>
|
||||
<AREA>
|
||||
<X_m>500</X_m>
|
||||
<Y_m>500</Y_m>
|
||||
</AREA>
|
||||
<MOBILITY>
|
||||
<UE_MOBILITY>
|
||||
<RANDOM_UE_DISTRIBUTION>
|
||||
<NUMBER_OF_NODES>4</NUMBER_OF_NODES>
|
||||
</RANDOM_UE_DISTRIBUTION>
|
||||
<UE_MOBILITY_TYPE>STATIC</UE_MOBILITY_TYPE> <!-- STATIC -->
|
||||
</UE_MOBILITY>
|
||||
<eNB_MOBILITY>
|
||||
<eNB_INITIAL_DISTRIBUTION>random</eNB_INITIAL_DISTRIBUTION>
|
||||
<RANDOM_eNB_DISTRIBUTION>
|
||||
<NUMBER_OF_CELLS>1</NUMBER_OF_CELLS>
|
||||
</RANDOM_eNB_DISTRIBUTION>
|
||||
<eNB_MOBILITY_TYPE>STATIC</eNB_MOBILITY_TYPE>
|
||||
</eNB_MOBILITY>
|
||||
</MOBILITY>
|
||||
</TOPOLOGY_CONFIG>
|
||||
|
||||
<APPLICATION_CONFIG>
|
||||
<!-- Basic configuration of a customized traffic : one state-->
|
||||
<CUSTOMIZED_TRAFFIC>
|
||||
<SOURCE_ID>0</SOURCE_ID>
|
||||
<TRANSPORT_PROTOCOL>udp</TRANSPORT_PROTOCOL> <!-- OPTIONS: tcp (default), udp -->
|
||||
<IP_VERSION>ipv6</IP_VERSION> <!-- OPTIONS: ipv4 (default), ipv6 -->
|
||||
<DESTINATION_ID>1:3</DESTINATION_ID>
|
||||
<BACKGROUND_TRAFFIC>disable</BACKGROUND_TRAFFIC> <!-- options: enable, disable. If enable, it generates a background traffic corresponding to the traffic direction-->
|
||||
<IDT_DIST>uniform</IDT_DIST> <!-- available distributions: none (default), uniform, poission, gaussian, exponential,pareto, cauchy,fixed, weibull, gammav-->
|
||||
<IDT_MIN_ms>40</IDT_MIN_ms> <!--Minimum IDT values in milliseconds-->
|
||||
<IDT_MAX_ms>50</IDT_MAX_ms> <!--Minimum IDT values in milliseconds-->
|
||||
<SIZE_DIST>fixed</SIZE_DIST> <!-- available distributions: none (default), uniform, poission, gaussian, exponential,pareto, cauchy,fixed, weibull, gammav-->
|
||||
<SIZE_MIN_byte>1400</SIZE_MIN_byte> <!--Minimum PAYLOAD size values in bytes-->
|
||||
<SIZE_MAX_byte>1400</SIZE_MAX_byte> <!--MAximum PAYLOAD size values in bytes-->
|
||||
</CUSTOMIZED_TRAFFIC>
|
||||
|
||||
<CUSTOMIZED_TRAFFIC>
|
||||
<SOURCE_ID>1:3</SOURCE_ID>
|
||||
<TRANSPORT_PROTOCOL>udp</TRANSPORT_PROTOCOL> <!-- OPTIONS: tcp (default), udp -->
|
||||
<IP_VERSION>ipv6</IP_VERSION> <!-- OPTIONS: ipv4 (default), ipv6 -->
|
||||
<DESTINATION_ID>0</DESTINATION_ID>
|
||||
<FLOW_START_ms>200</FLOW_START_ms> <!-- indicates the start time of the app or the actual duration of the traffic-->
|
||||
<FLOW_DURATION_ms>7000</FLOW_DURATION_ms> <!-- indicates the duration of the app or the actual duration of the traffic-->
|
||||
<BACKGROUND_TRAFFIC>disable</BACKGROUND_TRAFFIC> <!-- options: enable, disable. If enable, it generates a background traffic corresponding to the traffic direction-->
|
||||
<IDT_DIST>fixed</IDT_DIST> <!-- available distributions: none (default), uniform, poission, gaussian, exponential,pareto, cauchy,fixed, weibull, gammav-->
|
||||
<IDT_MIN_ms>40</IDT_MIN_ms> <!--Minimum IDT values in milliseconds-->
|
||||
<IDT_MAX_ms>50</IDT_MAX_ms> <!--Minimum IDT values in milliseconds-->
|
||||
<SIZE_DIST>uniform</SIZE_DIST> <!-- available distributions: none (default), uniform, poission, gaussian, exponential,pareto, cauchy,fixed, weibull, gammav-->
|
||||
<SIZE_MIN_byte>256</SIZE_MIN_byte> <!--Minimum PAYLOAD size values in bytes-->
|
||||
<SIZE_MAX_byte>768</SIZE_MAX_byte> <!--Maximum PAYLOAD size values in bytes-->
|
||||
</CUSTOMIZED_TRAFFIC>
|
||||
|
||||
</APPLICATION_CONFIG>
|
||||
|
||||
<EMULATION_CONFIG>
|
||||
<EMULATION_TIME_ms>30000</EMULATION_TIME_ms> <!--if 0 set to infinity-->
|
||||
<CURVE>disable</CURVE> <!-- option: enabled, disabled. If CURVE is enabled, graphes are ploted in real time (UL and DL) of WOD and throughput measurement for each packet -->
|
||||
<PERFORMANCE_METRICS>
|
||||
<THROUGHPUT>enable</THROUGHPUT> <!-- option: enable, disable. If enable, throughput measurements are plotted in real time-->
|
||||
<LATENCY>enable</LATENCY> <!-- option: enable, disable. If enable, latency measurements are plotted in real time-->
|
||||
<OWD_RADIO_ACCESS>enable</OWD_RADIO_ACCESS> <!-- option: enable, disable. If enable owd curve shows the one way radio access delay, else it shows end to end owd -->
|
||||
</PERFORMANCE_METRICS>
|
||||
<LOG> <!-- set the global log level -->
|
||||
<LEVEL>info</LEVEL>
|
||||
<VERBOSITY>low</VERBOSITY>
|
||||
<INTERVAL>1</INTERVAL>
|
||||
</LOG>
|
||||
<SEED_VALUE>1234</SEED_VALUE> <!-- value 0 means randomly generated by OAI -->
|
||||
|
||||
</EMULATION_CONFIG>
|
||||
|
||||
<PROFILE>MEDIEVAL_OTG_1</PROFILE>
|
||||
</OAI_EMULATION>
|
||||
|
||||
@@ -1,55 +0,0 @@
|
||||
<OAI_EMULATION>
|
||||
<TOPOLOGY_CONFIG>
|
||||
<AREA>
|
||||
<X_m>500</X_m>
|
||||
<Y_m>500</Y_m>
|
||||
</AREA>
|
||||
<MOBILITY>
|
||||
<UE_MOBILITY>
|
||||
<RANDOM_UE_DISTRIBUTION>
|
||||
<NUMBER_OF_NODES>1</NUMBER_OF_NODES>
|
||||
</RANDOM_UE_DISTRIBUTION>
|
||||
<UE_MOBILITY_TYPE>STATIC</UE_MOBILITY_TYPE> <!-- STATIC -->
|
||||
</UE_MOBILITY>
|
||||
<eNB_MOBILITY>
|
||||
<eNB_INITIAL_DISTRIBUTION>random</eNB_INITIAL_DISTRIBUTION>
|
||||
<RANDOM_eNB_DISTRIBUTION>
|
||||
<NUMBER_OF_CELLS>1</NUMBER_OF_CELLS>
|
||||
</RANDOM_eNB_DISTRIBUTION>
|
||||
<eNB_MOBILITY_TYPE>STATIC</eNB_MOBILITY_TYPE>
|
||||
</eNB_MOBILITY>
|
||||
</MOBILITY>
|
||||
</TOPOLOGY_CONFIG>
|
||||
<APPLICATION_CONFIG>
|
||||
|
||||
<!-- Basic configuration of a preconfigured M2M traffic with 4 states: OFF, PU, ED and PE-->
|
||||
<PREDEFINED_TRAFFIC>
|
||||
<SOURCE_ID>1</SOURCE_ID>
|
||||
<APPLICATION_TYPE>alarm_temperature</APPLICATION_TYPE> <!-- options: scbr,mcbr,bcbr, auto_pilot_l (LOW speed), auto_pilot_m (MEDIEUM speed), auto_pilot_h (HIGH speed), auto_pilot_e (EMERGENCY), virtual_race_l (LOW speed), virtual_race_m (MEDIUM speed), virtual_race_h (HIGH speed), virtual_race_f (FINISH speed), alarm_humidity, alarm_smoke, alarm_temperature -->
|
||||
<BACKGROUND_TRAFFIC>disable</BACKGROUND_TRAFFIC> <!-- options: enable, disable. If enable, it generates a background traffic corresponding to the traffic direction-->
|
||||
<AGGREGATION_LEVEL>1</AGGREGATION_LEVEL> <!-- options: default=1, the number of traffic to aggregate-->
|
||||
<DESTINATION_ID>0</DESTINATION_ID>
|
||||
</PREDEFINED_TRAFFIC>
|
||||
</APPLICATION_CONFIG>
|
||||
|
||||
|
||||
<EMULATION_CONFIG>
|
||||
<EMULATION_TIME_ms>10000</EMULATION_TIME_ms> <!--if 0 set to infinity-->
|
||||
<CURVE>enable</CURVE> <!-- option: enable, disable. If CURVE is enable, graphes are ploted in real time (UL and DL) of WOD and throughput measurement for each packet -->
|
||||
<BACKGROUND_STATS>enable</BACKGROUND_STATS> <!-- option: enable, disable. If enable, it allows to ptrint BACKGROUNS statistics: Nb packets, throughputs,etc-->
|
||||
<PERFORMANCE_METRICS>
|
||||
<THROUGHPUT>enable</THROUGHPUT> <!-- option: enable, disable. If enable, throughput measurements are plotted in real time-->
|
||||
<LATENCY>enable</LATENCY> <!-- option: enable, disable. If enable, latency measurements are plotted in real time-->
|
||||
<OWD_RADIO_ACCESS>enable</OWD_RADIO_ACCESS> <!-- option: enable, disable. If enable owd curve shows the one way radio access delay, else it shows end to end owd -->
|
||||
</PERFORMANCE_METRICS>
|
||||
<LOG> <!-- set the global log level -->
|
||||
<LEVEL>trace</LEVEL>
|
||||
<INTERVAL>1</INTERVAL>
|
||||
</LOG>
|
||||
<SEED_VALUE>1234</SEED_VALUE> <!-- value 0 means randomly generated by OAI -->
|
||||
|
||||
</EMULATION_CONFIG>
|
||||
|
||||
<PROFILE>OTG_2</PROFILE>
|
||||
</OAI_EMULATION>
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user