diff --git a/ci-scripts/Jenkinsfile-gitlab b/ci-scripts/Jenkinsfile-gitlab
index ff661543c0..de49275b7e 100644
--- a/ci-scripts/Jenkinsfile-gitlab
+++ b/ci-scripts/Jenkinsfile-gitlab
@@ -196,16 +196,6 @@ pipeline {
}
}
- stage ("Start VM -- enb-usrp") {
- steps {
- lock (vmResource) {
- timeout (time: 5, unit: 'MINUTES') {
- sh "./ci-scripts/oai-ci-vm-tool build --workspace $WORKSPACE --variant enb-usrp --job-name ${JOB_NAME} --build-id ${BUILD_ID} --daemon"
- }
- }
- }
- }
-
stage ("Start VM -- phy-sim") {
steps {
lock (vmResource) {
@@ -251,7 +241,7 @@ pipeline {
stage ("Analysis with cppcheck") {
steps {
gitlabCommitStatus(name: "Analysis with cppcheck") {
- timeout (time: 20, unit: 'MINUTES') {
+ timeout (time: 30, unit: 'MINUTES') {
sh "./ci-scripts/oai-ci-vm-tool wait --workspace $WORKSPACE --variant cppcheck --job-name ${JOB_NAME} --build-id ${BUILD_ID}"
}
}
@@ -260,7 +250,7 @@ pipeline {
stage ("Build basic simulator") {
steps {
gitlabCommitStatus(name: "Build basic-sim") {
- timeout (time: 20, unit: 'MINUTES') {
+ timeout (time: 30, unit: 'MINUTES') {
sh "./ci-scripts/oai-ci-vm-tool wait --workspace $WORKSPACE --variant basic-sim --job-name ${JOB_NAME} --build-id ${BUILD_ID} --keep-vm-alive"
}
}
@@ -269,7 +259,7 @@ pipeline {
stage ("Build 5G gNB-USRP") {
steps {
gitlabCommitStatus(name: "Build gNB-USRP") {
- timeout (time: 20, unit: 'MINUTES') {
+ timeout (time: 30, unit: 'MINUTES') {
sh "./ci-scripts/oai-ci-vm-tool wait --workspace $WORKSPACE --variant gnb-usrp --job-name ${JOB_NAME} --build-id ${BUILD_ID} --keep-vm-alive"
}
}
@@ -278,25 +268,16 @@ pipeline {
stage ("Build 5G NR-UE-USRP") {
steps {
gitlabCommitStatus(name: "Build nr-UE-USRP") {
- timeout (time: 20, unit: 'MINUTES') {
+ timeout (time: 30, unit: 'MINUTES') {
sh "./ci-scripts/oai-ci-vm-tool wait --workspace $WORKSPACE --variant nr-ue-usrp --job-name ${JOB_NAME} --build-id ${BUILD_ID} --keep-vm-alive"
}
}
}
}
- stage ("Build eNB-USRP") {
- steps {
- gitlabCommitStatus(name: "Build eNB-USRP") {
- timeout (time: 20, unit: 'MINUTES') {
- sh "./ci-scripts/oai-ci-vm-tool wait --workspace $WORKSPACE --variant enb-usrp --job-name ${JOB_NAME} --build-id ${BUILD_ID}"
- }
- }
- }
- }
stage ("Build physical simulators") {
steps {
gitlabCommitStatus(name: "Build phy-sim") {
- timeout (time: 20, unit: 'MINUTES') {
+ timeout (time: 30, unit: 'MINUTES') {
sh "./ci-scripts/oai-ci-vm-tool wait --workspace $WORKSPACE --variant phy-sim --job-name ${JOB_NAME} --build-id ${BUILD_ID} --keep-vm-alive"
}
}
@@ -305,7 +286,7 @@ pipeline {
stage ("Build eNB-ethernet") {
steps {
gitlabCommitStatus(name: "Build eNB-ethernet") {
- timeout (time: 20, unit: 'MINUTES') {
+ timeout (time: 30, unit: 'MINUTES') {
sh "./ci-scripts/oai-ci-vm-tool wait --workspace $WORKSPACE --variant enb-ethernet --job-name ${JOB_NAME} --build-id ${BUILD_ID} --keep-vm-alive"
}
}
@@ -316,7 +297,7 @@ pipeline {
// This is typically the last one to finish.
lock (vmResource) {
gitlabCommitStatus(name: "Build UE-ethernet") {
- timeout (time: 20, unit: 'MINUTES') {
+ timeout (time: 30, unit: 'MINUTES') {
sh "./ci-scripts/oai-ci-vm-tool wait --workspace $WORKSPACE --variant ue-ethernet --job-name ${JOB_NAME} --build-id ${BUILD_ID} --keep-vm-alive"
}
}
diff --git a/ci-scripts/buildOnVM.sh b/ci-scripts/buildOnVM.sh
index 0ba00ce07f..2b1a5e0c71 100755
--- a/ci-scripts/buildOnVM.sh
+++ b/ci-scripts/buildOnVM.sh
@@ -62,6 +62,12 @@ function build_on_vm {
echo "ARCHIVES_LOC = $ARCHIVES_LOC"
echo "BUILD_OPTIONS = $BUILD_OPTIONS"
+ if [[ "$VM_NAME" == *"-enb-usrp"* ]]
+ then
+ echo "This VM type is no longer supported in the pipeline framework"
+ return
+ fi
+
IS_VM_ALIVE=`uvt-kvm list | grep -c $VM_NAME`
if [ $IS_VM_ALIVE -eq 0 ]
@@ -211,7 +217,15 @@ function build_on_vm {
echo "echo \"./build_oai -I $BUILD_OPTIONS \"" >> $VM_CMDS
echo "./build_oai -I $BUILD_OPTIONS > log/install-build.txt 2>&1" >> $VM_CMDS
else
- echo "echo \"./build_oai -I $BUILD_OPTIONS\" > ./my-vm-build.sh" >> $VM_CMDS
+ if [[ "$VM_NAME" == *"-enb-ethernet"* ]]
+ then
+ echo "echo \"sleep 170 && ./build_oai -I $BUILD_OPTIONS\" > ./my-vm-build.sh" >> $VM_CMDS
+ elif [[ "$VM_NAME" == *"-ue-ethernet"* ]]
+ then
+ echo "echo \"sleep 60 && ./build_oai -I $BUILD_OPTIONS\" > ./my-vm-build.sh" >> $VM_CMDS
+ else
+ echo "echo \"./build_oai -I $BUILD_OPTIONS\" > ./my-vm-build.sh" >> $VM_CMDS
+ fi
echo "chmod 775 ./my-vm-build.sh " >> $VM_CMDS
echo "echo \"sudo -E daemon --inherit --unsafe --name=build_daemon --chdir=/home/ubuntu/tmp/cmake_targets -o /home/ubuntu/tmp/cmake_targets/log/install-build.txt ./my-vm-build.sh\"" >> $VM_CMDS
echo "sudo -E daemon --inherit --unsafe --name=build_daemon --chdir=/home/ubuntu/tmp/cmake_targets -o /home/ubuntu/tmp/cmake_targets/log/install-build.txt ./my-vm-build.sh" >> $VM_CMDS
diff --git a/ci-scripts/createVM.sh b/ci-scripts/createVM.sh
index 237a1a5d5e..b67668f0bc 100755
--- a/ci-scripts/createVM.sh
+++ b/ci-scripts/createVM.sh
@@ -87,6 +87,12 @@ function create_vm {
echo "VM_CPU = $VM_CPU"
echo "VM_DISK = $VM_DISK GBytes"
+ if [[ "$VM_NAME" == *"-enb-usrp"* ]]
+ then
+ echo "This VM type is no longer supported in the pipeline framework"
+ return
+ fi
+
echo "############################################################"
echo "Creating VM ($VM_NAME) on Ubuntu Cloud Image base"
echo "############################################################"
diff --git a/ci-scripts/oai-ci-vm-tool b/ci-scripts/oai-ci-vm-tool
index b7a11f21ee..d8f088b707 100755
--- a/ci-scripts/oai-ci-vm-tool
+++ b/ci-scripts/oai-ci-vm-tool
@@ -214,15 +214,15 @@ function variant__v6__nr_ue_usrp {
function variant__v7__enb_ethernet {
VM_MEMORY=4096
ARCHIVES_LOC=enb_eth
- NB_PATTERN_FILES=8
- BUILD_OPTIONS="--eNB"
+ NB_PATTERN_FILES=9
+ BUILD_OPTIONS="--eNB -w USRP"
}
function variant__v8__ue_ethernet {
VM_MEMORY=4096
ARCHIVES_LOC=ue_eth
- NB_PATTERN_FILES=12
- BUILD_OPTIONS="--UE"
+ NB_PATTERN_FILES=13
+ BUILD_OPTIONS="--UE -w USRP"
}
function variant__v10__flexran_rtc {
diff --git a/ci-scripts/reportBuildLocally.sh b/ci-scripts/reportBuildLocally.sh
index 44d200c3b6..19a486303f 100755
--- a/ci-scripts/reportBuildLocally.sh
+++ b/ci-scripts/reportBuildLocally.sh
@@ -580,16 +580,42 @@ function report_build {
sca_summary_table_row ./archives/cppcheck/cppcheck.xml "Expression depends on order of evaluation of side effects" unknownEvaluationOrder
sca_summary_table_footer ./archives/cppcheck/cppcheck.xml
- summary_table_header "OAI Build: 4G LTE eNB -- USRP option" ./archives/enb_usrp
- summary_table_row "LTE SoftModem - Release 15" ./archives/enb_usrp/lte-softmodem.Rel15.txt "Built target lte-softmodem" ./enb_usrp_row1.html
- summary_table_row "Coding - Release 15" ./archives/enb_usrp/coding.Rel15.txt "Built target coding" ./enb_usrp_row2.html
- summary_table_row "OAI USRP device if - Release 15" ./archives/enb_usrp/oai_usrpdevif.Rel15.txt "Built target oai_usrpdevif" ./enb_usrp_row3.html
- summary_table_row "OAI ETHERNET transport - Release 15" ./archives/enb_usrp/oai_eth_transpro.Rel15.txt "Built target oai_eth_transpro" ./enb_usrp_row4.html
- summary_table_row "Parameters Lib Config - Release 15" ./archives/enb_usrp/params_libconfig.Rel15.txt "Built target params_libconfig" ./enb_usrp_row5.html
- summary_table_row "NASMESH - Release 15" ./archives/enb_usrp/nasmesh.Rel15.txt "Built target nasmesh" ./enb_usrp_row6.html
- summary_table_row "RB Tool - Release 15" ./archives/enb_usrp/rb_tool.Rel15.txt "Built target rb_tool" ./enb_usrp_row7.html
- summary_table_row "RF Simulator - Release 15" ./archives/enb_usrp/rfsimulator.Rel15.txt "Built target rfsimulator" ./enb_usrp_row8.html
- summary_table_row "TCP Bridge - Release 15" ./archives/enb_usrp/tcp_bridge_oai.Rel15.txt "Built target tcp_bridge_oai" ./enb_usrp_row9.html
+# summary_table_header "OAI Build: 4G LTE eNB -- USRP option" ./archives/enb_usrp
+# summary_table_row "LTE SoftModem - Release 15" ./archives/enb_usrp/lte-softmodem.Rel15.txt "Built target lte-softmodem" ./enb_usrp_row1.html
+# summary_table_row "Coding - Release 15" ./archives/enb_usrp/coding.Rel15.txt "Built target coding" ./enb_usrp_row2.html
+# summary_table_row "OAI USRP device if - Release 15" ./archives/enb_usrp/oai_usrpdevif.Rel15.txt "Built target oai_usrpdevif" ./enb_usrp_row3.html
+# summary_table_row "OAI ETHERNET transport - Release 15" ./archives/enb_usrp/oai_eth_transpro.Rel15.txt "Built target oai_eth_transpro" ./enb_usrp_row4.html
+# summary_table_row "Parameters Lib Config - Release 15" ./archives/enb_usrp/params_libconfig.Rel15.txt "Built target params_libconfig" ./enb_usrp_row5.html
+# summary_table_row "NASMESH - Release 15" ./archives/enb_usrp/nasmesh.Rel15.txt "Built target nasmesh" ./enb_usrp_row6.html
+# summary_table_row "RB Tool - Release 15" ./archives/enb_usrp/rb_tool.Rel15.txt "Built target rb_tool" ./enb_usrp_row7.html
+# summary_table_row "RF Simulator - Release 15" ./archives/enb_usrp/rfsimulator.Rel15.txt "Built target rfsimulator" ./enb_usrp_row8.html
+# summary_table_row "TCP Bridge - Release 15" ./archives/enb_usrp/tcp_bridge_oai.Rel15.txt "Built target tcp_bridge_oai" ./enb_usrp_row9.html
+# summary_table_footer
+#
+ summary_table_header "OAI Build: 4G LTE eNB -- USRP option" ./archives/enb_eth
+ summary_table_row "LTE SoftModem - Release 15" ./archives/enb_eth/lte-softmodem.Rel15.txt "Built target lte-softmodem" ./enb_eth_row1.html
+ summary_table_row "Coding - Release 15" ./archives/enb_eth/coding.Rel15.txt "Built target coding" ./enb_eth_row2.html
+ summary_table_row "OAI ETHERNET transport - Release 15" ./archives/enb_eth/oai_eth_transpro.Rel15.txt "Built target oai_eth_transpro" ./enb_eth_row3.html
+ summary_table_row "Parameters Lib Config - Release 15" ./archives/enb_eth/params_libconfig.Rel15.txt "Built target params_libconfig" ./enb_eth_row4.html
+ summary_table_row "RF Simulator - Release 15" ./archives/enb_eth/rfsimulator.Rel15.txt "Built target rfsimulator" ./enb_eth_row5.html
+ summary_table_row "TCP OAI Bridge - Release 15" ./archives/enb_eth/tcp_bridge_oai.Rel15.txt "Built target tcp_bridge_oai" ./enb_eth_row6.html
+ summary_table_row "OAI USRP device if - Release 15" ./archives/enb_eth/oai_usrpdevif.Rel15.txt "Built target oai_usrpdevif" ./enb_eth_row7.html
+ summary_table_row "NASMESH - Release 15" ./archives/enb_eth/nasmesh.Rel15.txt "Built target nasmesh" ./enb_eth_row8.html
+ summary_table_row "RB Tool - Release 15" ./archives/enb_eth/rb_tool.Rel15.txt "Built target rb_tool" ./enb_eth_row9.html
+ summary_table_footer
+
+ summary_table_header "OAI Build: 4G LTE UE -- USRP option" ./archives/ue_eth
+ summary_table_row "LTE UE SoftModem - Release 15" ./archives/ue_eth/lte-uesoftmodem.Rel15.txt "Built target lte-uesoftmodem" ./ue_eth_row1.html
+ summary_table_row "Coding - Release 15" ./archives/ue_eth/coding.Rel15.txt "Built target coding" ./ue_eth_row2.html
+ summary_table_row "OAI ETHERNET transport - Release 15" ./archives/ue_eth/oai_eth_transpro.Rel15.txt "Built target oai_eth_transpro" ./ue_eth_row3.html
+ summary_table_row "Parameters Lib Config - Release 15" ./archives/ue_eth/params_libconfig.Rel15.txt "Built target params_libconfig" ./ue_eth_row4.html
+ summary_table_row "RF Simulator - Release 15" ./archives/ue_eth/rfsimulator.Rel15.txt "Built target rfsimulator" ./ue_eth_row5.html
+ summary_table_row "TCP OAI Bridge - Release 15" ./archives/ue_eth/tcp_bridge_oai.Rel15.txt "Built target tcp_bridge_oai" ./ue_eth_row6.html
+ summary_table_row "Conf 2 UE Data - Release 15" ./archives/ue_eth/conf2uedata.Rel15.txt "Built target conf2uedata" ./ue_eth_row7.html
+ summary_table_row "NVRAM - Release 15" ./archives/ue_eth/nvram.Rel15.txt "Built target nvram" ./ue_eth_row8.html
+ summary_table_row "UE IP - Release 15" ./archives/ue_eth/ue_ip.Rel15.txt "Built target ue_ip" ./ue_eth_row9.html
+ summary_table_row "USIM - Release 15" ./archives/ue_eth/usim.Rel15.txt "Built target usim" ./ue_eth_row9a.html
+ summary_table_row "OAI USRP device if - Release 15" ./archives/ue_eth/oai_usrpdevif.Rel15.txt "Built target oai_usrpdevif" ./ue_eth_row9b.html
summary_table_footer
summary_table_header "OAI Build: 4G LTE basic simulator option" ./archives/basic_sim
@@ -676,28 +702,6 @@ function report_build {
summary_table_footer
fi
- summary_table_header "OAI Build: 4G LTE eNB -- ETHERNET transport option" ./archives/enb_eth
- summary_table_row "LTE SoftModem - Release 15" ./archives/enb_eth/lte-softmodem.Rel15.txt "Built target lte-softmodem" ./enb_eth_row1.html
- summary_table_row "Coding - Release 15" ./archives/enb_eth/coding.Rel15.txt "Built target coding" ./enb_eth_row2.html
- summary_table_row "OAI ETHERNET transport - Release 15" ./archives/enb_eth/oai_eth_transpro.Rel15.txt "Built target oai_eth_transpro" ./enb_eth_row3.html
- summary_table_row "Parameters Lib Config - Release 15" ./archives/enb_eth/params_libconfig.Rel15.txt "Built target params_libconfig" ./enb_eth_row4.html
- summary_table_row "RF Simulator - Release 15" ./archives/enb_eth/rfsimulator.Rel15.txt "Built target rfsimulator" ./enb_eth_row5.html
- summary_table_row "TCP OAI Bridge - Release 15" ./archives/enb_eth/tcp_bridge_oai.Rel15.txt "Built target tcp_bridge_oai" ./enb_eth_row6.html
- summary_table_footer
-
- summary_table_header "OAI Build: 4G LTE UE -- ETHERNET transport option" ./archives/ue_eth
- summary_table_row "LTE UE SoftModem - Release 15" ./archives/ue_eth/lte-uesoftmodem.Rel15.txt "Built target lte-uesoftmodem" ./ue_eth_row1.html
- summary_table_row "Coding - Release 15" ./archives/ue_eth/coding.Rel15.txt "Built target coding" ./ue_eth_row2.html
- summary_table_row "OAI ETHERNET transport - Release 15" ./archives/ue_eth/oai_eth_transpro.Rel15.txt "Built target oai_eth_transpro" ./ue_eth_row3.html
- summary_table_row "Parameters Lib Config - Release 15" ./archives/ue_eth/params_libconfig.Rel15.txt "Built target params_libconfig" ./ue_eth_row4.html
- summary_table_row "RF Simulator - Release 15" ./archives/ue_eth/rfsimulator.Rel15.txt "Built target rfsimulator" ./ue_eth_row5.html
- summary_table_row "TCP OAI Bridge - Release 15" ./archives/ue_eth/tcp_bridge_oai.Rel15.txt "Built target tcp_bridge_oai" ./ue_eth_row6.html
- summary_table_row "Conf 2 UE Data - Release 15" ./archives/ue_eth/conf2uedata.Rel15.txt "Built target conf2uedata" ./ue_eth_row7.html
- summary_table_row "NVRAM - Release 15" ./archives/ue_eth/nvram.Rel15.txt "Built target nvram" ./ue_eth_row8.html
- summary_table_row "UE IP - Release 15" ./archives/ue_eth/ue_ip.Rel15.txt "Built target ue_ip" ./ue_eth_row9.html
- summary_table_row "USIM - Release 15" ./archives/ue_eth/usim.Rel15.txt "Built target usim" ./ue_eth_row9a.html
- summary_table_footer
-
if [ -e ./archives/red_hat ]
then
echo "
Red Hat Enterprise Linux Server release 7.6) -- Summary
" >> ./build_results.html
@@ -714,9 +718,23 @@ function report_build {
echo " " >> ./build_results.html
echo " " >> ./build_results.html
- if [ -f ./enb_usrp_row1.html ] || [ -f ./enb_usrp_row2.html ] || [ -f ./enb_usrp_row3.html ] || [ -f ./enb_usrp_row4.html ]
+# if [ -f ./enb_usrp_row1.html ] || [ -f ./enb_usrp_row2.html ] || [ -f ./enb_usrp_row3.html ] || [ -f ./enb_usrp_row4.html ]
+# then
+# for DETAILS_TABLE in `ls ./enb_usrp_row*.html`
+# do
+# cat $DETAILS_TABLE >> ./build_results.html
+# done
+# fi
+ if [ -f ./enb_eth_row1.html ] || [ -f ./enb_eth_row2.html ] || [ -f ./enb_eth_row3.html ] || [ -f ./enb_eth_row4.html ] || [ -f ./enb_eth_row5.html ] || [ -f ./enb_eth_row6.html ] || [ -f ./enb_eth_row7.html ] || [ -f ./enb_eth_row8.html ] || [ -f ./enb_eth_row9.html ]
then
- for DETAILS_TABLE in `ls ./enb_usrp_row*.html`
+ for DETAILS_TABLE in `ls ./enb_eth_row*.html`
+ do
+ cat $DETAILS_TABLE >> ./build_results.html
+ done
+ fi
+ if [ -f ./ue_eth_row1.html ] || [ -f ./ue_eth_row2.html ] || [ -f ./ue_eth_row3.html ] || [ -f ./ue_eth_row4.html ] || [ -f ./ue_eth_row5.html ] || [ -f ./ue_eth_row6.html ] || [ -f ./ue_eth_row7.html ] || [ -f ./ue_eth_row8.html ] || [ -f ./ue_eth_row9.html ] || [ -f ./ue_eth_row9a.html ] || [ -f ./ue_eth_row9b.html ]
+ then
+ for DETAILS_TABLE in `ls ./ue_eth_row*.html`
do
cat $DETAILS_TABLE >> ./build_results.html
done
@@ -749,20 +767,6 @@ function report_build {
cat $DETAILS_TABLE >> ./build_results.html
done
fi
- if [ -f ./enb_eth_row1.html ] || [ -f ./enb_eth_row2.html ] || [ -f ./enb_eth_row3.html ] || [ -f ./enb_eth_row4.html ] || [ -f ./enb_eth_row5.html ] || [ -f ./enb_eth_row6.html ]
- then
- for DETAILS_TABLE in `ls ./enb_eth_row*.html`
- do
- cat $DETAILS_TABLE >> ./build_results.html
- done
- fi
- if [ -f ./ue_eth_row1.html ] || [ -f ./ue_eth_row2.html ] || [ -f ./ue_eth_row3.html ] || [ -f ./ue_eth_row4.html ] || [ -f ./ue_eth_row5.html ] || [ -f ./ue_eth_row6.html ]
- then
- for DETAILS_TABLE in `ls ./ue_eth_row*.html`
- do
- cat $DETAILS_TABLE >> ./build_results.html
- done
- fi
if [ -f ./enb_usrp_rh_row1.html ] || [ -f ./enb_usrp_rh_row2.html ] || [ -f ./enb_usrp_rh_row3.html ] || [ -f ./enb_usrp_rh_row4.html ]
then
for DETAILS_TABLE in `ls ./enb_usrp_rh_row*.html`
diff --git a/ci-scripts/waitBuildOnVM.sh b/ci-scripts/waitBuildOnVM.sh
index f066dacd81..ff2129a187 100755
--- a/ci-scripts/waitBuildOnVM.sh
+++ b/ci-scripts/waitBuildOnVM.sh
@@ -47,6 +47,12 @@ function wait_on_vm_build {
echo "ARCHIVES_LOC = $ARCHIVES_LOC"
echo "BUILD_OPTIONS = $BUILD_OPTIONS"
+ if [[ "$VM_NAME" == *"-enb-usrp"* ]]
+ then
+ echo "This VM type is no longer supported in the pipeline framework"
+ return
+ fi
+
IS_VM_ALIVE=`uvt-kvm list | grep -c $VM_NAME`
if [ $IS_VM_ALIVE -eq 0 ]
@@ -84,6 +90,12 @@ function wait_on_vm_build {
}
function check_on_vm_build {
+ if [[ "$VM_NAME" == *"-enb-usrp"* ]]
+ then
+ echo "This VM type is no longer supported in the pipeline framework"
+ return
+ fi
+
echo "############################################################"
echo "Creating a tmp folder to store results and artifacts"
echo "############################################################"
diff --git a/common/utils/T/T_defs.h b/common/utils/T/T_defs.h
index 2f7e6e7570..11c816f002 100644
--- a/common/utils/T/T_defs.h
+++ b/common/utils/T/T_defs.h
@@ -52,7 +52,7 @@
/* we don't need much space for the basic simulator */
# define T_CACHE_SIZE 1024
#else
-# define T_CACHE_SIZE (8192 )
+# define T_CACHE_SIZE (8192)
#endif
/* maximum number of bytes a message can contain */
diff --git a/common/utils/T/T_messages.txt b/common/utils/T/T_messages.txt
index 06ee5bf12b..bad6444e13 100644
--- a/common/utils/T/T_messages.txt
+++ b/common/utils/T/T_messages.txt
@@ -1,3 +1,7 @@
+ID = BENETEL
+ GROUP = ALL
+ FORMAT = int,frame : int,slot : buffer,rxdataF
+
#general logs
ID = ENB_MASTER_TICK
DESC = eNodeB master tick - one tick per ms, to be used as "reference clock", mostly for ticktime view
diff --git a/doc/TESTING_GNB_W_COTS_UE.md b/doc/TESTING_GNB_W_COTS_UE.md
index 610cc5bdd4..73ae18351f 100644
--- a/doc/TESTING_GNB_W_COTS_UE.md
+++ b/doc/TESTING_GNB_W_COTS_UE.md
@@ -30,8 +30,6 @@ http://www.saelig.com/MFR00066/ste2300.htm
## Configuration Overview
* Non Standalone (NSA) configuration : initial Control Plane established between UE and RAN eNB, then User Plane established between UE and gNB, Core network is 4G based supporting rel 15
-
-* Commercial UE: Oppo Reno 5G
* OAI Software Defined gNB and eNB
* eNB RF front end: USRP (ETTUS) B200 Mini or B210
* gNB RF front end: USRP (ETTUS) B200 Mini or B210 (N310 will be needed for MIMO and wider BW's)
@@ -40,6 +38,17 @@ http://www.saelig.com/MFR00066/ste2300.htm
* BW: 40MHz
* Antenna scheme: SISO
+## COTS UEs
+
+Our code might not work with all 5G phones yet, but we are constantly improving it. Here is a list of COTS UEs that we know that work with OAI.
+
+* Oppo Reno 5G
+* Samsung A90 5G
+* Google Pixel 5G
+* Simcom SIMCOM8200EA
+* Quectel RM500Q-GL
+
+
## Repository
https://gitlab.eurecom.fr/oai/openairinterface5g/tree/develop
diff --git a/executables/nr-gnb.c b/executables/nr-gnb.c
index f0a7833331..37298875c5 100644
--- a/executables/nr-gnb.c
+++ b/executables/nr-gnb.c
@@ -999,7 +999,13 @@ void init_eNB_afterRU(void) {
for (i=0; iRU_list[ru_id]->nb_rx; aa++,i++) {
LOG_I(PHY,"Attaching RU %d antenna %d to gNB antenna %d\n",gNB->RU_list[ru_id]->idx,i,aa);
gNB->prach_vars.rxsigF[aa] = gNB->RU_list[ru_id]->prach_rxsigF[0][i];
+#if 0
+printf("before %p\n", gNB->common_vars.rxdataF[aa]);
+#endif
gNB->common_vars.rxdataF[aa] = gNB->RU_list[ru_id]->common.rxdataF[i];
+#if 0
+printf("after %p\n", gNB->common_vars.rxdataF[aa]);
+#endif
}
}
diff --git a/openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c b/openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c
index 713e71674b..38b35dcf6d 100644
--- a/openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c
+++ b/openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c
@@ -158,6 +158,8 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
#endif
for (aarx=0; aarxframe_parms.nb_antennas_rx; aarx++) {
+ re_offset = k; /* Initializing the Resource element offset for each Rx antenna */
+
pil = (int16_t *)&pilot[0];
rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+k+nushift)];
ul_ch = (int16_t *)&ul_ch_estimates[aarx][ch_offset];
diff --git a/openair1/SCHED_NR/phy_procedures_nr_gNB.c b/openair1/SCHED_NR/phy_procedures_nr_gNB.c
index f775eb9130..9d7422745e 100644
--- a/openair1/SCHED_NR/phy_procedures_nr_gNB.c
+++ b/openair1/SCHED_NR/phy_procedures_nr_gNB.c
@@ -551,6 +551,11 @@ void phy_procedures_gNB_uespec_RX(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx)
gNB_I0_measurements(gNB);
+ // measure enegry in SS=10 L=4, nb_rb = 18, first_rb = 0 (corresponds to msg3)
+ int offset = 10*gNB->frame_parms.ofdm_symbol_size + gNB->frame_parms.first_carrier_offset;
+ int power_rxF = signal_energy_nodc(&gNB->common_vars.rxdataF[0][offset],12*18);
+ LOG_D(PHY,"frame %d, slot %d: UL signal energy %d\n",frame_rx,slot_rx,power_rxF);
+
for (int i=0;ipucch[i];
if (pucch) {
@@ -646,6 +651,8 @@ void phy_procedures_gNB_uespec_RX(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx)
}
#endif
+T(T_BENETEL, T_INT(frame_rx), T_INT(slot_rx), T_BUFFER(&gNB->common_vars.rxdataF[0][0], 2048*4*14));
+
uint8_t symbol_start = ulsch_harq->ulsch_pdu.start_symbol_index;
uint8_t symbol_end = symbol_start + ulsch_harq->ulsch_pdu.nr_of_symbols;
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_NR_RX_PUSCH,1);
diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler.c
index 7201b29596..ede68b11ef 100644
--- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler.c
+++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler.c
@@ -371,7 +371,13 @@ void gNB_dlsch_ulsch_scheduler(module_id_t module_idP,
#define BIT(x) (1 << (x))
const uint64_t dlsch_in_slot_bitmap = BIT( 1) | BIT( 2) | BIT( 3) | BIT( 4) | BIT( 5) | BIT( 6)
| BIT(11) | BIT(12) | BIT(13) | BIT(14) | BIT(15) | BIT(16);
- const uint64_t ulsch_in_slot_bitmap = BIT( 8) | BIT(18);
+
+ uint8_t prach_config_index = scc->uplinkConfigCommon->initialUplinkBWP->rach_ConfigCommon->choice.setup->rach_ConfigGeneric.prach_ConfigurationIndex;
+ uint64_t ulsch_in_slot_bitmap;
+ if (prach_config_index==4) //this is the PRACH config used in the Benetel RRU. TODO: make this generic for any PRACH config.
+ ulsch_in_slot_bitmap = BIT( 8) | BIT( 9);
+ else
+ ulsch_in_slot_bitmap = BIT( 8) | BIT(18);
memset(RC.nrmac[module_idP]->cce_list[bwp_id][0],0,MAX_NUM_CCE*sizeof(int)); // coreset0
memset(RC.nrmac[module_idP]->cce_list[bwp_id][1],0,MAX_NUM_CCE*sizeof(int)); // coresetid 1
diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
index 938ba17165..0873671921 100644
--- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
+++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c
@@ -395,7 +395,7 @@ void nr_rx_sdu(const module_id_t gnb_mod_idP,
T_BUFFER(sduP, sdu_lenP));
UE_info->mac_stats[UE_id].ulsch_total_bytes_rx += sdu_lenP;
- LOG_D(MAC, "[gNB %d][PUSCH %d] CC_id %d %d.%d Received ULSCH sdu from PHY (rnti %x, UE_id %d) ul_cqi %d\n",
+ LOG_D(MAC, "[gNB %d][PUSCH %d] CC_id %d %d.%d Received ULSCH sdu from PHY (rnti %x, UE_id %d) ul_cqi %d sduP %p\n",
gnb_mod_idP,
harq_pid,
CC_idP,
@@ -403,7 +403,8 @@ void nr_rx_sdu(const module_id_t gnb_mod_idP,
slotP,
current_rnti,
UE_id,
- ul_cqi);
+ ul_cqi,
+ sduP);
// if not missed detection (10dB threshold for now)
if (UE_scheduling_control->ul_rssi < (100+rssi)) {
diff --git a/targets/ARCH/ETHERNET/benetel/4g/benetel.c b/targets/ARCH/ETHERNET/benetel/4g/benetel.c
index 76855111e1..d3b72463b4 100644
--- a/targets/ARCH/ETHERNET/benetel/4g/benetel.c
+++ b/targets/ARCH/ETHERNET/benetel/4g/benetel.c
@@ -163,8 +163,8 @@ int trx_benetel_ctlrecv(openair0_device *device, void *msg, ssize_t msg_len)
cap->FH_fmt = OAI_IF4p5_only;
cap->num_bands = 1;
cap->band_list[0] = 7;
- cap->nb_rx[0] = 1;
- cap->nb_tx[0] = 1;
+ cap->nb_rx[0] = device->openair0_cfg->rx_num_channels;
+ cap->nb_tx[0] = device->openair0_cfg->tx_num_channels;
cap->max_pdschReferenceSignalPower[0] = -27;
cap->max_rxgain[0] = 90;
@@ -194,11 +194,12 @@ void benetel_fh_if4p5_south_in(RU_t *ru,
LTE_DL_FRAME_PARMS *fp;
int symbol;
int32_t *rxdata;
- int antenna = 0;
+ int antenna;
lock_ul_buffer(&s->buffers, *subframe);
next:
- while (!(s->buffers.ul_busy[*subframe] == 0x3fff ||
+ while (!((s->buffers.ul_busy[0][*subframe] == 0x3fff &&
+ s->buffers.ul_busy[1][*subframe] == 0x3fff) ||
s->buffers.prach_busy[*subframe] == 1))
wait_ul_buffer(&s->buffers, *subframe);
if (s->buffers.prach_busy[*subframe] == 1) {
@@ -217,24 +218,27 @@ next:
eNB = eNB_list[0];
fp = &eNB->frame_parms;
- for (symbol = 0; symbol < 14; symbol++) {
- int i;
- uint16_t *p = (uint16_t *)(&s->buffers.ul[*subframe][symbol*1200*4]);
- for (i = 0; i < 1200*2; i++) {
- p[i] = htons(p[i]);
- }
- rxdata = &ru->common.rxdataF[antenna][symbol * fp->ofdm_symbol_size];
+ for (antenna = 0; antenna < ru->nb_rx; antenna++) {
+ for (symbol = 0; symbol < 14; symbol++) {
+ int i;
+ uint16_t *p = (uint16_t *)(&s->buffers.ul[antenna][*subframe][symbol*1200*4]);
+ for (i = 0; i < 1200*2; i++) {
+ p[i] = htons(p[i]);
+ }
+ rxdata = &ru->common.rxdataF[antenna][symbol * fp->ofdm_symbol_size];
#if 1
- memcpy(rxdata + 2048 - 600,
- &s->buffers.ul[*subframe][symbol*1200*4],
- 600 * 4);
- memcpy(rxdata,
- &s->buffers.ul[*subframe][symbol*1200*4] + 600*4,
- 600 * 4);
+ memcpy(rxdata + 2048 - 600,
+ &s->buffers.ul[antenna][*subframe][symbol*1200*4],
+ 600 * 4);
+ memcpy(rxdata,
+ &s->buffers.ul[antenna][*subframe][symbol*1200*4] + 600*4,
+ 600 * 4);
#endif
+ }
}
- s->buffers.ul_busy[*subframe] = 0;
+ s->buffers.ul_busy[0][*subframe] = 0;
+ s->buffers.ul_busy[1][*subframe] = 0;
signal_ul_buffer(&s->buffers, *subframe);
unlock_ul_buffer(&s->buffers, *subframe);
@@ -272,45 +276,49 @@ void benetel_fh_if4p5_south_out(RU_t *ru,
LTE_DL_FRAME_PARMS *fp;
int symbol;
int32_t *txdata;
- int aa = 0;
+ int aa;
//printf("BENETEL: %s (f.sf %d.%d ts %ld)\n", __FUNCTION__, frame, subframe, timestamp);
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_TRX_TST, ru->proc.timestamp_tx&0xffffffff );
lock_dl_buffer(&s->buffers, subframe);
- if (s->buffers.dl_busy[subframe]) {
+ if (s->buffers.dl_busy[0][subframe] ||
+ s->buffers.dl_busy[1][subframe]) {
printf("%s: fatal: DL buffer busy for subframe %d\n", __FUNCTION__, subframe);
unlock_dl_buffer(&s->buffers, subframe);
return;
}
eNB = eNB_list[0];
fp = &eNB->frame_parms;
- if (ru->num_eNB != 1 || ru->nb_tx != 1 || fp->ofdm_symbol_size != 2048 ||
+ if (ru->num_eNB != 1 || fp->ofdm_symbol_size != 2048 ||
fp->Ncp != NORMAL || fp->symbols_per_tti != 14) {
printf("%s:%d:%s: unsupported configuration\n",
__FILE__, __LINE__, __FUNCTION__);
exit(1);
}
- for (symbol = 0; symbol < 14; symbol++) {
- txdata = &ru->common.txdataF_BF[aa][symbol * fp->ofdm_symbol_size];
+ for (aa = 0; aa < ru->nb_tx; aa++) {
+ for (symbol = 0; symbol < 14; symbol++) {
+ txdata = &ru->common.txdataF_BF[aa][symbol * fp->ofdm_symbol_size];
#if 1
- memcpy(&s->buffers.dl[subframe][symbol*1200*4],
- txdata + 2048 - 600,
- 600 * 4);
- memcpy(&s->buffers.dl[subframe][symbol*1200*4] + 600*4,
- txdata + 1,
- 600 * 4);
+ memcpy(&s->buffers.dl[aa][subframe][symbol*1200*4],
+ txdata + 2048 - 600,
+ 600 * 4);
+ memcpy(&s->buffers.dl[aa][subframe][symbol*1200*4] + 600*4,
+ txdata + 1,
+ 600 * 4);
#endif
- int i;
- uint16_t *p = (uint16_t *)(&s->buffers.dl[subframe][symbol*1200*4]);
- for (i = 0; i < 1200*2; i++) {
- p[i] = htons(p[i]);
+ int i;
+ uint16_t *p = (uint16_t *)(&s->buffers.dl[aa][subframe][symbol*1200*4]);
+ for (i = 0; i < 1200*2; i++) {
+ p[i] = htons(p[i]);
+ }
}
}
- s->buffers.dl_busy[subframe] = 0x3fff;
+ s->buffers.dl_busy[0][subframe] = 0x3fff;
+ s->buffers.dl_busy[1][subframe] = 0x3fff;
unlock_dl_buffer(&s->buffers, subframe);
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_IF4P5_SOUTH_OUT_RU+ru->idx, ru->proc.frame_tx);
diff --git a/targets/ARCH/ETHERNET/benetel/4g/dpdk_driver.c b/targets/ARCH/ETHERNET/benetel/4g/dpdk_driver.c
index 42953d1d4a..2b6ef37e6f 100644
--- a/targets/ARCH/ETHERNET/benetel/4g/dpdk_driver.c
+++ b/targets/ARCH/ETHERNET/benetel/4g/dpdk_driver.c
@@ -233,19 +233,20 @@ l2fwd_simple_forward(struct rte_mbuf *m, unsigned portid, benetel_t *bs)
}
- if(PAYLOAD_1 == 0x12 && PAYLOAD_2 == 0xce && ANT_NUM == 0x00) {
+ if(PAYLOAD_1 == 0x12 && PAYLOAD_2 == 0xce) {
p.frame = FRAME;
p.subframe = SUBFRAME >> 4;
p.slot = 0; /* unused */
p.symbol = SYMBOL;
- p.antenna = 0;
+ p.antenna = ANT_NUM;
memcpy(p.iq, IQ_ptr, 4800);
store_ul(bs, &p);
}
- // U-PLANE UL ANT_0 PROCESSING
- if(PAYLOAD_1 == 0x12 && PAYLOAD_2 == 0xce && ANT_NUM == 0x00 && dl_start == 1)
+ // U-PLANE UL PROCESSING
+ if(PAYLOAD_1 == 0x12 && PAYLOAD_2 == 0xce && dl_start == 1)
{
+ int a = ANT_NUM;
int tx_frame = FRAME;
int tx_subframe = SUBFRAME >> 4;
int tx_symbol = SYMBOL + 5;
@@ -266,33 +267,20 @@ l2fwd_simple_forward(struct rte_mbuf *m, unsigned portid, benetel_t *bs)
SUBFRAME = tx_subframe << 4;
SYMBOL = tx_symbol;
- /* antenna 0 - send actual DL data (if available) */
+ /* send actual DL data (if available) */
lock_dl_buffer(bs->buffers, tx_subframe);
- if (!(bs->buffers->dl_busy[tx_subframe] & (1 << tx_symbol))) {
- printf("%s: warning, DL underflow (sf.symbol %d.%d)\n", __FUNCTION__,
+ if (!(bs->buffers->dl_busy[a][tx_subframe] & (1 << tx_symbol))) {
+ printf("%s: warning, DL underflow (antenna %d sf.symbol %d.%d)\n",
+ __FUNCTION__,
+ a,
tx_subframe, tx_symbol);
memset(IQ_ptr, 0, 1200 * 4);
} else {
- memcpy(IQ_ptr, bs->buffers->dl[tx_subframe] + tx_symbol * 1200*4,
+ memcpy(IQ_ptr, bs->buffers->dl[a][tx_subframe] + tx_symbol * 1200*4,
1200*4);
}
- bs->buffers->dl_busy[tx_subframe] &= ~(1 << tx_symbol);
+ bs->buffers->dl_busy[a][tx_subframe] &= ~(1 << tx_symbol);
unlock_dl_buffer(bs->buffers, tx_subframe);
-
- // fill DL Data for ant 0 with 0 value
-// memset(IQ_ptr, 0, 4800);
- }
-
- // U-PLANE UL ANT_1 PROCESSING
- else if(PAYLOAD_1 == 0x12 && PAYLOAD_2 == 0xce && ANT_NUM == 0x01 && dl_start == 1)
- {
-
-// ANT_NUM = 0x01;
- SYMBOL = (SYMBOL + 5) % 14;
- PAYLOAD_2 = 0xc8;
-
- // fill DL Data for ant 1 with 0 value
- memset(IQ_ptr, 0, 4800);
}
// U-PLANE PRACH PROCESSING
diff --git a/targets/ARCH/ETHERNET/benetel/4g/low.c b/targets/ARCH/ETHERNET/benetel/4g/low.c
index 038592d596..14783a700b 100644
--- a/targets/ARCH/ETHERNET/benetel/4g/low.c
+++ b/targets/ARCH/ETHERNET/benetel/4g/low.c
@@ -27,37 +27,36 @@
void store_ul(benetel_t *bs, ul_packet_t *ul)
{
- /* only antenna 0 for the moment */
- if (ul->antenna != 0)
- return;
+ int a = ul->antenna;
- if (ul->subframe != bs->next_subframe ||
- ul->symbol != bs->next_symbol) {
- printf("%s: fatal, expected frame.sf.symbol %d.%d.%d, got %d.%d.%d\n",
+ if (ul->subframe != bs->next_subframe[a] ||
+ ul->symbol != bs->next_symbol[a]) {
+ printf("%s: fatal, antenna %d expected frame.sf.symbol %d.%d.%d, got %d.%d.%d\n",
__FUNCTION__,
- bs->expected_benetel_frame, bs->next_subframe, bs->next_symbol,
+ a,
+ bs->expected_benetel_frame[a], bs->next_subframe[a], bs->next_symbol[a],
ul->frame, ul->subframe, ul->symbol);
exit(1);
}
- lock_ul_buffer(bs->buffers, bs->next_subframe);
- if (bs->buffers->ul_busy[bs->next_subframe] & (1 << bs->next_symbol)) {
+ lock_ul_buffer(bs->buffers, bs->next_subframe[a]);
+ if (bs->buffers->ul_busy[a][bs->next_subframe[a]] & (1 << bs->next_symbol[a])) {
printf("%s: warning, UL overflow (sf.symbol %d.%d)\n", __FUNCTION__,
- bs->next_subframe, bs->next_symbol);
+ bs->next_subframe[a], bs->next_symbol[a]);
}
- memcpy(bs->buffers->ul[bs->next_subframe] + bs->next_symbol * 1200*4,
+ memcpy(bs->buffers->ul[a][bs->next_subframe[a]] + bs->next_symbol[a] * 1200*4,
ul->iq, 1200*4);
- bs->buffers->ul_busy[bs->next_subframe] |= (1 << bs->next_symbol);
- signal_ul_buffer(bs->buffers, bs->next_subframe);
- unlock_ul_buffer(bs->buffers, bs->next_subframe);
+ bs->buffers->ul_busy[a][bs->next_subframe[a]] |= (1 << bs->next_symbol[a]);
+ signal_ul_buffer(bs->buffers, bs->next_subframe[a]);
+ unlock_ul_buffer(bs->buffers, bs->next_subframe[a]);
- bs->next_symbol++;
- if (bs->next_symbol == 14) {
- bs->next_symbol = 0;
- bs->next_subframe = (bs->next_subframe + 1) % 10;
- if (bs->next_subframe == 0) {
- bs->expected_benetel_frame++;
- bs->expected_benetel_frame &= 255;
+ bs->next_symbol[a]++;
+ if (bs->next_symbol[a] == 14) {
+ bs->next_symbol[a] = 0;
+ bs->next_subframe[a] = (bs->next_subframe[a] + 1) % 10;
+ if (bs->next_subframe[a] == 0) {
+ bs->expected_benetel_frame[a]++;
+ bs->expected_benetel_frame[a] &= 255;
}
}
}
diff --git a/targets/ARCH/ETHERNET/benetel/4g/low.h b/targets/ARCH/ETHERNET/benetel/4g/low.h
index 5e75d9181e..e74bf89163 100644
--- a/targets/ARCH/ETHERNET/benetel/4g/low.h
+++ b/targets/ARCH/ETHERNET/benetel/4g/low.h
@@ -26,9 +26,10 @@
typedef struct {
shared_buffers *buffers;
- int next_subframe;
- int next_symbol;
- int expected_benetel_frame;
+ /* [2] is for two antennas */
+ int next_subframe[2];
+ int next_symbol[2];
+ int expected_benetel_frame[2];
char *dpdk_main_command_line;
} benetel_t;
diff --git a/targets/ARCH/ETHERNET/benetel/4g/low_dpdk.c b/targets/ARCH/ETHERNET/benetel/4g/low_dpdk.c
index ecff473010..edf62a67e0 100644
--- a/targets/ARCH/ETHERNET/benetel/4g/low_dpdk.c
+++ b/targets/ARCH/ETHERNET/benetel/4g/low_dpdk.c
@@ -68,7 +68,8 @@ void *benetel_start_dpdk(char *ifname, shared_buffers *buffers, char *dpdk_main_
bs->buffers = buffers;
- bs->expected_benetel_frame = 255;
+ bs->expected_benetel_frame[0] = 255;
+ bs->expected_benetel_frame[1] = 255;
bs->dpdk_main_command_line = dpdk_main_command_line;
diff --git a/targets/ARCH/ETHERNET/benetel/4g/shared_buffers.c b/targets/ARCH/ETHERNET/benetel/4g/shared_buffers.c
index 492a15dfc3..380cbabc73 100644
--- a/targets/ARCH/ETHERNET/benetel/4g/shared_buffers.c
+++ b/targets/ARCH/ETHERNET/benetel/4g/shared_buffers.c
@@ -44,9 +44,12 @@ void init_buffers(shared_buffers *s)
/* in FDD the eNB's first transmitted DL subframe is 4 but the device
* needs to have subframes 1, 2 and 3 ready. Let's pretend there are ready.
*/
- s->dl_busy[1] = 0x3fff;
- s->dl_busy[2] = 0x3fff;
- s->dl_busy[3] = 0x3fff;
+ s->dl_busy[0][1] = 0x3fff;
+ s->dl_busy[0][2] = 0x3fff;
+ s->dl_busy[0][3] = 0x3fff;
+ s->dl_busy[1][1] = 0x3fff;
+ s->dl_busy[1][2] = 0x3fff;
+ s->dl_busy[1][3] = 0x3fff;
}
void lock_dl_buffer(shared_buffers *s, int subframe)
diff --git a/targets/ARCH/ETHERNET/benetel/4g/shared_buffers.h b/targets/ARCH/ETHERNET/benetel/4g/shared_buffers.h
index 1d5040b95b..ed174265c5 100644
--- a/targets/ARCH/ETHERNET/benetel/4g/shared_buffers.h
+++ b/targets/ARCH/ETHERNET/benetel/4g/shared_buffers.h
@@ -26,10 +26,11 @@
#include
typedef struct {
- unsigned char dl[10][14*1200*4];
- unsigned char ul[10][14*1200*4];
- uint16_t dl_busy[10];
- uint16_t ul_busy[10];
+ /* [2] is for two antennas */
+ unsigned char dl[2][10][14*1200*4];
+ unsigned char ul[2][10][14*1200*4];
+ uint16_t dl_busy[2][10];
+ uint16_t ul_busy[2][10];
pthread_mutex_t m_ul[10];
pthread_cond_t c_ul[10];
diff --git a/targets/ARCH/ETHERNET/benetel/5g/benetel.c b/targets/ARCH/ETHERNET/benetel/5g/benetel.c
index 2f60e7dc49..cededa968e 100644
--- a/targets/ARCH/ETHERNET/benetel/5g/benetel.c
+++ b/targets/ARCH/ETHERNET/benetel/5g/benetel.c
@@ -162,8 +162,9 @@ int trx_benetel_ctlrecv(openair0_device *device, void *msg, ssize_t msg_len)
cap->FH_fmt = OAI_IF4p5_only;
cap->num_bands = 1;
cap->band_list[0] = 78;
- cap->nb_rx[0] = 1;
- cap->nb_tx[0] = 1;
+ /* TODO: hardcoded to 1 for the moment, get the real value somehow... */
+ cap->nb_rx[0] = 1; //device->openair0_cfg->rx_num_channels;
+ cap->nb_tx[0] = 1; //device->openair0_cfg->tx_num_channels;
cap->max_pdschReferenceSignalPower[0] = -27;
cap->max_rxgain[0] = 90;
@@ -201,12 +202,13 @@ void benetel_fh_if4p5_south_in(RU_t *ru,
NR_DL_FRAME_PARMS *fp;
int symbol;
int32_t *rxdata;
- int antenna = 0;
+ int antenna;
lock_ul_buffer(&s->buffers, *slot);
#if 1
next:
- while (!(s->buffers.ul_busy[*slot] == 0x3fff ||
+ while (!((s->buffers.ul_busy[0][*slot] == 0x3fff &&
+ s->buffers.ul_busy[1][*slot] == 0x3fff) ||
s->buffers.prach_busy[*slot] == 1))
wait_ul_buffer(&s->buffers, *slot);
if (s->buffers.prach_busy[*slot] == 1) {
@@ -226,24 +228,31 @@ next:
#endif
fp = ru->nr_frame_parms;
- for (symbol = 0; symbol < 14; symbol++) {
- int i;
- uint16_t *p = (uint16_t *)(&s->buffers.ul[*slot][symbol*1272*4]);
- for (i = 0; i < 1272*2; i++) {
- p[i] = htons(p[i]);
- }
- rxdata = &ru->common.rxdataF[antenna][symbol * fp->ofdm_symbol_size];
-#if 1
- memcpy(rxdata + 2048 - 1272/2,
- &s->buffers.ul[*slot][symbol*1272*4],
- (1272/2) * 4);
- memcpy(rxdata,
- &s->buffers.ul[*slot][symbol*1272*4] + (1272/2)*4,
- (1272/2) * 4);
+ for (antenna = 0; antenna < ru->nb_rx; antenna++) {
+ for (symbol = 0; symbol < 14; symbol++) {
+ int i;
+ int16_t *p = (int16_t *)(&s->buffers.ul[antenna][*slot][symbol*1272*4]);
+ for (i = 0; i < 1272*2; i++) {
+ p[i] = (int16_t)(ntohs(p[i])) / 16;
+ }
+ rxdata = &ru->common.rxdataF[antenna][symbol * fp->ofdm_symbol_size];
+#if 0
+if (*slot == 0 && symbol == 0)
+printf("rxdata in benetel_fh_if4p5_south_in %p\n", &ru->common.rxdataF[antenna][0]);
#endif
+#if 1
+ memcpy(rxdata + 2048 - 1272/2,
+ &s->buffers.ul[antenna][*slot][symbol*1272*4],
+ (1272/2) * 4);
+ memcpy(rxdata,
+ &s->buffers.ul[antenna][*slot][symbol*1272*4] + (1272/2)*4,
+ (1272/2) * 4);
+#endif
+ }
}
- s->buffers.ul_busy[*slot] = 0;
+ s->buffers.ul_busy[0][*slot] = 0;
+ s->buffers.ul_busy[1][*slot] = 0;
signal_ul_buffer(&s->buffers, *slot);
unlock_ul_buffer(&s->buffers, *slot);
@@ -281,43 +290,47 @@ void benetel_fh_if4p5_south_out(RU_t *ru,
NR_DL_FRAME_PARMS *fp;
int symbol;
int32_t *txdata;
- int aa = 0;
+ int aa;
//printf("BENETEL: %s (f.sf %d.%d ts %ld)\n", __FUNCTION__, frame, slot, timestamp);
lock_dl_buffer(&s->buffers, slot);
- if (s->buffers.dl_busy[slot]) {
+ if (s->buffers.dl_busy[0][slot] ||
+ s->buffers.dl_busy[1][slot]) {
printf("%s: fatal: DL buffer busy for subframe %d\n", __FUNCTION__, slot);
unlock_dl_buffer(&s->buffers, slot);
return;
}
fp = ru->nr_frame_parms;
- if (ru->num_gNB != 1 || ru->nb_tx != 1 || fp->ofdm_symbol_size != 2048 ||
+ if (ru->num_gNB != 1 || fp->ofdm_symbol_size != 2048 ||
fp->Ncp != NORMAL || fp->symbols_per_slot != 14) {
printf("%s:%d:%s: unsupported configuration\n",
__FILE__, __LINE__, __FUNCTION__);
exit(1);
}
- for (symbol = 0; symbol < 14; symbol++) {
- txdata = &ru->common.txdataF_BF[aa][symbol * fp->ofdm_symbol_size];
+ for (aa = 0; aa < ru->nb_tx; aa++) {
+ for (symbol = 0; symbol < 14; symbol++) {
+ txdata = &ru->common.txdataF_BF[aa][symbol * fp->ofdm_symbol_size];
#if 1
- memcpy(&s->buffers.dl[slot][symbol*1272*4],
- txdata + 2048 - (1272/2),
- (1272/2) * 4);
- memcpy(&s->buffers.dl[slot][symbol*1272*4] + (1272/2)*4,
- txdata,
- (1272/2) * 4);
+ memcpy(&s->buffers.dl[aa][slot][symbol*1272*4],
+ txdata + 2048 - (1272/2),
+ (1272/2) * 4);
+ memcpy(&s->buffers.dl[aa][slot][symbol*1272*4] + (1272/2)*4,
+ txdata,
+ (1272/2) * 4);
#endif
- int i;
- uint16_t *p = (uint16_t *)(&s->buffers.dl[slot][symbol*1272*4]);
- for (i = 0; i < 1272*2; i++) {
- p[i] = htons(p[i]);
+ int i;
+ uint16_t *p = (uint16_t *)(&s->buffers.dl[aa][slot][symbol*1272*4]);
+ for (i = 0; i < 1272*2; i++) {
+ p[i] = htons(p[i]);
+ }
}
}
- s->buffers.dl_busy[slot] = 0x3fff;
+ s->buffers.dl_busy[0][slot] = 0x3fff;
+ s->buffers.dl_busy[1][slot] = 0x3fff;
unlock_dl_buffer(&s->buffers, slot);
}
diff --git a/targets/ARCH/ETHERNET/benetel/5g/dpdk_driver.c b/targets/ARCH/ETHERNET/benetel/5g/dpdk_driver.c
index dd50603ec5..88f4ecb4cd 100644
--- a/targets/ARCH/ETHERNET/benetel/5g/dpdk_driver.c
+++ b/targets/ARCH/ETHERNET/benetel/5g/dpdk_driver.c
@@ -243,21 +243,22 @@ l2fwd_simple_forward(struct rte_mbuf *m, unsigned portid, benetel_t *bs)
}
- if(PAYLOAD_1 == 0x13 && PAYLOAD_2 == 0xe4 && ANT_NUM == 0x00) {
+ if(PAYLOAD_1 == 0x13 && PAYLOAD_2 == 0xe4) {
int subframe = SUBFRAME >> 4;
int slot = ((SUBFRAME & 0x0f) << 2) | ((SYMBOL >> 6) & 0x03);
p.frame = FRAME;
p.slot = subframe * 2 + slot;
p.symbol = SYMBOL & 0x3f;
- p.antenna = 0;
+ p.antenna = ANT_NUM;
memcpy(p.iq, IQ_ptr, 5088);
store_ul(bs, &p);
// if (p.symbol==0) printf("store ul f.sl.sy %d.%d.%d\n", p.frame, p.slot, p.symbol);
}
- // U-PLANE UL ANT_0 PROCESSING
- if(PAYLOAD_1 == 0x13 && PAYLOAD_2 == 0xe4 && ANT_NUM == 0x00 && dl_start == 1)
+ // U-PLANE UL PROCESSING
+ if(PAYLOAD_1 == 0x13 && PAYLOAD_2 == 0xe4 && dl_start == 1)
{
+ int a = ANT_NUM & 0x01;
int frame = FRAME;
int subframe = SUBFRAME >> 4;
int slot = ((SUBFRAME & 0x0f) << 2) | ((SYMBOL >> 6) & 0x03);
@@ -282,66 +283,45 @@ l2fwd_simple_forward(struct rte_mbuf *m, unsigned portid, benetel_t *bs)
}
}
- ANT_NUM = 0x00;
-
// Mask the symbol bits from UL packet received and apply the shift.
SYMBOL = ((SYMBOL & 0b00111111) + 10) % 14;
- ANT_NUM = 0x00;
+ ANT_NUM = a;
SUBFRAME = sf;
+ if (a == 1)
+ slot_id_ctrl++;
+
// Slot id control for DL
- if(slot_id_ctrl > 13){
- SYMBOL = SYMBOL | 0b01000000;
+ if (slot_id_ctrl > 13) {
+ SYMBOL = SYMBOL | 0b01000000;
+
+ if (a == 1) {
+ if (slot_id_ctrl > 27) {
+ slot_id_ctrl = 0;
+ sf = sf + 0x10;
+
+ if (sf > 0x90){
+ sf = 0;
+ }
+ }
+ }
}
- /* antenna 0 - send actual DL data (if available) */
+ /* send actual DL data (if available) */
oai_slot = tx_subframe * 2 + tx_slot;
lock_dl_buffer(bs->buffers, oai_slot);
- if (!(bs->buffers->dl_busy[oai_slot] & (1 << tx_symbol))) {
- printf("%s: warning, DL underflow (sl.symbol %d.%d)\n", __FUNCTION__,
- oai_slot, tx_symbol);
+ if (!(bs->buffers->dl_busy[a][oai_slot] & (1 << tx_symbol))) {
+ printf("%s: warning, DL underflow (antenna %d sl.symbol %d.%d)\n", __FUNCTION__,
+ a, oai_slot, tx_symbol);
memset(IQ_ptr, 0, 1272 * 4);
} else {
- memcpy(IQ_ptr, bs->buffers->dl[oai_slot] + tx_symbol * 1272*4,
+ memcpy(IQ_ptr, bs->buffers->dl[a][oai_slot] + tx_symbol * 1272*4,
1272*4);
}
//printf("DL buffer f sf slot symbol %d %d %d %d (sf %d)\n", tx_frame, tx_subframe, tx_slot, tx_symbol, (int)sf);
- bs->buffers->dl_busy[oai_slot] &= ~(1 << tx_symbol);
+ bs->buffers->dl_busy[a][oai_slot] &= ~(1 << tx_symbol);
unlock_dl_buffer(bs->buffers, oai_slot);
-
- // fill DL Data for ant 0 with 0 value
-// memset(IQ_ptr, 0, 5088);
- }
-
- // U-PLANE UL ANT_1 PROCESSING
- if(PAYLOAD_1 == 0x13 && PAYLOAD_2 == 0xe4 && ANT_NUM == 0x01 && dl_start == 1)
- {
-
- // Mask the symbol bits from UL packet received and apply the shift.
- SYMBOL = ((SYMBOL & 0b00111111) +10) % 14;
-
- ANT_NUM = 0x01;
- SUBFRAME = sf;
-
- slot_id_ctrl++;
-
- // Slot id control for DL
- if(slot_id_ctrl > 13){
- SYMBOL = SYMBOL | 0b01000000;
-
- if(slot_id_ctrl > 27){
- slot_id_ctrl = 0;
- sf = sf + 0x10;
-
- if (sf >0x90){
- sf = 0;
- }
- }
- }
-
- // fill DL Data for ant 1 with 0 value
- memset(IQ_ptr, 0, 5088);
}
// U-PLANE PRACH PROCESSING
diff --git a/targets/ARCH/ETHERNET/benetel/5g/low.c b/targets/ARCH/ETHERNET/benetel/5g/low.c
index 52c9f24127..b34d69784f 100644
--- a/targets/ARCH/ETHERNET/benetel/5g/low.c
+++ b/targets/ARCH/ETHERNET/benetel/5g/low.c
@@ -35,63 +35,61 @@ printf("store_ul %d.%ld (%ld)\n", (int)(t.tv_sec % 60), t.tv_nsec, t.tv_nsec - o
old = t;
#endif
- /* only antenna 0 for the moment */
- if (ul->antenna != 0)
- return;
+ int a = ul->antenna;
- if (ul->slot != bs->next_slot ||
- ul->symbol != bs->next_symbol) {
- printf("%s: error, expected frame.sl.symbol %d.%d.%d, got %d.%d.%d\n",
+ if (ul->slot != bs->next_slot[a] ||
+ ul->symbol != bs->next_symbol[a]) {
+ printf("%s: error, antenna %d expected frame.sl.symbol %d.%d.%d, got %d.%d.%d\n",
__FUNCTION__,
- bs->expected_benetel_frame, bs->next_slot, bs->next_symbol,
+ a, bs->expected_benetel_frame[a], bs->next_slot[a], bs->next_symbol[a],
ul->frame, ul->slot, ul->symbol);
}
/* fill missing data with 0s */
- while (ul->slot != bs->next_slot ||
- ul->symbol != bs->next_symbol) {
- lock_ul_buffer(bs->buffers, bs->next_slot);
- if (bs->buffers->ul_busy[bs->next_slot] & (1 << bs->next_symbol)) {
- printf("%s: warning, UL overflow (sl.symbol %d.%d)\n", __FUNCTION__,
- bs->next_slot, bs->next_symbol);
+ while (ul->slot != bs->next_slot[a] ||
+ ul->symbol != bs->next_symbol[a]) {
+ lock_ul_buffer(bs->buffers, bs->next_slot[a]);
+ if (bs->buffers->ul_busy[a][bs->next_slot[a]] & (1 << bs->next_symbol[a])) {
+ printf("%s: warning, antenna %d UL overflow (sl.symbol %d.%d)\n", __FUNCTION__,
+ a, bs->next_slot[a], bs->next_symbol[a]);
}
- memset(bs->buffers->ul[bs->next_slot] + bs->next_symbol * 1272*4,
+ memset(bs->buffers->ul[a][bs->next_slot[a]] + bs->next_symbol[a] * 1272*4,
0, 1272*4);
- bs->buffers->ul_busy[bs->next_slot] |= (1 << bs->next_symbol);
- signal_ul_buffer(bs->buffers, bs->next_slot);
- unlock_ul_buffer(bs->buffers, bs->next_slot);
+ bs->buffers->ul_busy[a][bs->next_slot[a]] |= (1 << bs->next_symbol[a]);
+ signal_ul_buffer(bs->buffers, bs->next_slot[a]);
+ unlock_ul_buffer(bs->buffers, bs->next_slot[a]);
- bs->next_symbol++;
- if (bs->next_symbol == 14) {
- bs->next_symbol = 0;
- bs->next_slot = (bs->next_slot + 1) % 20;
- if (bs->next_slot == 0) {
- bs->expected_benetel_frame++;
- bs->expected_benetel_frame &= 255;
+ bs->next_symbol[a]++;
+ if (bs->next_symbol[a] == 14) {
+ bs->next_symbol[a] = 0;
+ bs->next_slot[a] = (bs->next_slot[a] + 1) % 20;
+ if (bs->next_slot[a] == 0) {
+ bs->expected_benetel_frame[a]++;
+ bs->expected_benetel_frame[a] &= 255;
}
}
}
- lock_ul_buffer(bs->buffers, bs->next_slot);
- if (bs->buffers->ul_busy[bs->next_slot] & (1 << bs->next_symbol)) {
- printf("%s: warning, UL overflow (sl.symbol %d.%d)\n", __FUNCTION__,
- bs->next_slot, bs->next_symbol);
+ lock_ul_buffer(bs->buffers, bs->next_slot[a]);
+ if (bs->buffers->ul_busy[a][bs->next_slot[a]] & (1 << bs->next_symbol[a])) {
+ printf("%s: warning, antenna %d UL overflow (sl.symbol %d.%d)\n", __FUNCTION__,
+ a, bs->next_slot[a], bs->next_symbol[a]);
}
- memcpy(bs->buffers->ul[bs->next_slot] + bs->next_symbol * 1272*4,
+ memcpy(bs->buffers->ul[a][bs->next_slot[a]] + bs->next_symbol[a] * 1272*4,
ul->iq, 1272*4);
- bs->buffers->ul_busy[bs->next_slot] |= (1 << bs->next_symbol);
- signal_ul_buffer(bs->buffers, bs->next_slot);
- unlock_ul_buffer(bs->buffers, bs->next_slot);
+ bs->buffers->ul_busy[a][bs->next_slot[a]] |= (1 << bs->next_symbol[a]);
+ signal_ul_buffer(bs->buffers, bs->next_slot[a]);
+ unlock_ul_buffer(bs->buffers, bs->next_slot[a]);
- bs->next_symbol++;
- if (bs->next_symbol == 14) {
- bs->next_symbol = 0;
- bs->next_slot = (bs->next_slot + 1) % 20;
- if (bs->next_slot == 0) {
- bs->expected_benetel_frame++;
- bs->expected_benetel_frame &= 255;
+ bs->next_symbol[a]++;
+ if (bs->next_symbol[a] == 14) {
+ bs->next_symbol[a] = 0;
+ bs->next_slot[a] = (bs->next_slot[a] + 1) % 20;
+ if (bs->next_slot[a] == 0) {
+ bs->expected_benetel_frame[a]++;
+ bs->expected_benetel_frame[a] &= 255;
}
}
}
diff --git a/targets/ARCH/ETHERNET/benetel/5g/low.h b/targets/ARCH/ETHERNET/benetel/5g/low.h
index 5e1daee9d1..659819296a 100644
--- a/targets/ARCH/ETHERNET/benetel/5g/low.h
+++ b/targets/ARCH/ETHERNET/benetel/5g/low.h
@@ -26,9 +26,10 @@
typedef struct {
shared_buffers *buffers;
- int next_slot;
- int next_symbol;
- int expected_benetel_frame;
+ /* [2] is for two antennas */
+ int next_slot[2];
+ int next_symbol[2];
+ int expected_benetel_frame[2];
char *dpdk_main_command_line;
} benetel_t;
diff --git a/targets/ARCH/ETHERNET/benetel/5g/low_dpdk.c b/targets/ARCH/ETHERNET/benetel/5g/low_dpdk.c
index 5e26f6782e..b26df07723 100644
--- a/targets/ARCH/ETHERNET/benetel/5g/low_dpdk.c
+++ b/targets/ARCH/ETHERNET/benetel/5g/low_dpdk.c
@@ -68,7 +68,8 @@ void *benetel_start_dpdk(char *ifname, shared_buffers *buffers, char *dpdk_main_
bs->buffers = buffers;
- bs->expected_benetel_frame = 255;
+ bs->expected_benetel_frame[0] = 255;
+ bs->expected_benetel_frame[1] = 255;
bs->dpdk_main_command_line = dpdk_main_command_line;
diff --git a/targets/ARCH/ETHERNET/benetel/5g/shared_buffers.c b/targets/ARCH/ETHERNET/benetel/5g/shared_buffers.c
index b9da10b380..a302400eb4 100644
--- a/targets/ARCH/ETHERNET/benetel/5g/shared_buffers.c
+++ b/targets/ARCH/ETHERNET/benetel/5g/shared_buffers.c
@@ -45,11 +45,16 @@ void init_buffers(shared_buffers *s)
* needs to have slots 1, 2 and 3, 4 and 5 ready. Let's pretend
* they are ready.
*/
- s->dl_busy[1] = 0x3fff;
- s->dl_busy[2] = 0x3fff;
- s->dl_busy[3] = 0x3fff;
- s->dl_busy[4] = 0x3fff;
- s->dl_busy[5] = 0x3fff;
+ s->dl_busy[0][1] = 0x3fff;
+ s->dl_busy[0][2] = 0x3fff;
+ s->dl_busy[0][3] = 0x3fff;
+ s->dl_busy[0][4] = 0x3fff;
+ s->dl_busy[0][5] = 0x3fff;
+ s->dl_busy[1][1] = 0x3fff;
+ s->dl_busy[1][2] = 0x3fff;
+ s->dl_busy[1][3] = 0x3fff;
+ s->dl_busy[1][4] = 0x3fff;
+ s->dl_busy[1][5] = 0x3fff;
}
void lock_dl_buffer(shared_buffers *s, int slot)
diff --git a/targets/ARCH/ETHERNET/benetel/5g/shared_buffers.h b/targets/ARCH/ETHERNET/benetel/5g/shared_buffers.h
index ca7dbd9c8f..9d51b8138d 100644
--- a/targets/ARCH/ETHERNET/benetel/5g/shared_buffers.h
+++ b/targets/ARCH/ETHERNET/benetel/5g/shared_buffers.h
@@ -26,10 +26,11 @@
#include
typedef struct {
- unsigned char dl[20][14*1272*4];
- unsigned char ul[20][14*1272*4];
- uint16_t dl_busy[20];
- uint16_t ul_busy[20];
+ /* [2] is for two antennas */
+ unsigned char dl[2][20][14*1272*4];
+ unsigned char ul[2][20][14*1272*4];
+ uint16_t dl_busy[2][20];
+ uint16_t ul_busy[2][20];
pthread_mutex_t m_ul[20];
pthread_cond_t c_ul[20];
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/benetel-4g.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/benetel-4g.conf
index 49b4e4441e..aab3876d96 100644
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/benetel-4g.conf
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/benetel-4g.conf
@@ -230,12 +230,12 @@ RUs = (
local_if_name = "dpdk";
sdr_addrs = "softmodem -m 2048 -l 35 -n 2 -b 0000:81:00.3 --proc-type auto --file-prefix ggg -- -p 0x1";
#sdr_addrs = "softmodem -l 8 -n 2 -- -p 0x2";
- remote_address = "127.0.0.2";
- local_address = "127.0.0.1";
- local_portc = 50000;
- remote_portc = 50000;
- local_portd = 50001;
- remote_portd = 50001;
+ #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 = "raw_if4p5"
nb_tx = 1
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/benetel-5g.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/benetel-5g.conf
index 037de199df..504d5e7b34 100644
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/benetel-5g.conf
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/benetel-5g.conf
@@ -23,6 +23,8 @@ gNBs =
ssb_SubcarrierOffset = 31; //0;
pdsch_AntennaPorts = 1;
+ #pusch_TargetSNRx10 = 200;
+ #pucch_TargetSNRx10 = 200;
pusch_TargetSNRx10 = 200;
pucch_TargetSNRx10 = 200;
@@ -102,8 +104,9 @@ gNBs =
prach_msg1_FDM = 0;
prach_msg1_FrequencyStart = 74;
zeroCorrelationZoneConfig = 13;
- #preambleReceivedTargetPower = -118;
- preambleReceivedTargetPower = -104;
+ preambleReceivedTargetPower = -118;
+ #preambleReceivedTargetPower = -104;
+ #preambleReceivedTargetPower = -108;
#preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200)
preambleTransMax = 6;
#powerRampingStep
@@ -149,14 +152,16 @@ gNBs =
initialULBWPstartSymbolAndLength_2 = 52;
msg3_DeltaPreamble = 1;
- p0_NominalWithGrant =-90;
+ #p0_NominalWithGrant =-90;
+ p0_NominalWithGrant =-118;
# pucch-ConfigCommon setup :
# pucchGroupHopping
# 0 = neither, 1= group hopping, 2=sequence hopping
pucchGroupHopping = 0;
hoppingId = 40;
- p0_nominal = -90;
+ #p0_nominal = -90;
+ p0_nominal = -118;
# ssb_PositionsInBurs_BitmapPR
# 1=short, 2=medium, 3=long
ssb_PositionsInBurst_PR = 2;
@@ -189,7 +194,7 @@ gNBs =
nrofUplinkSymbols = 4; //0; //4;
#ssPBCH_BlockPower = 10;
- ssPBCH_BlockPower = 10;
+ ssPBCH_BlockPower = -35;
}
);
@@ -229,9 +234,9 @@ gNBs =
{
GNB_INTERFACE_NAME_FOR_S1_MME = "eth0";
- GNB_IPV4_ADDRESS_FOR_S1_MME = "192.168.18.195/24";
+ GNB_IPV4_ADDRESS_FOR_S1_MME = "192.168.18.187/24";
GNB_INTERFACE_NAME_FOR_S1U = "eth0";
- GNB_IPV4_ADDRESS_FOR_S1U = "192.168.18.195/24";
+ GNB_IPV4_ADDRESS_FOR_S1U = "192.168.18.187/24";
GNB_PORT_FOR_S1U = 2152; # Spec 2152
GNB_IPV4_ADDRESS_FOR_X2C = "127.0.0.2/24";
GNB_PORT_FOR_X2C = 36422; # Spec 36422
@@ -251,6 +256,7 @@ L1s = (
{
num_cc = 1;
tr_n_preference = "local_mac";
+ pusch_proc_threads = 8;
}
);
diff --git a/targets/RT/USER/lte-ru.c b/targets/RT/USER/lte-ru.c
index ff74a37584..204bc741ce 100644
--- a/targets/RT/USER/lte-ru.c
+++ b/targets/RT/USER/lte-ru.c
@@ -3013,6 +3013,7 @@ RU_t **RCconfig_RU(int nb_RU,int nb_L1_inst,PHY_VARS_eNB ***eNB,uint64_t *ru_mas
ru[j]->if_south = LOCAL_RF;
ru[j]->function = NGFI_RRU_IF4p5;
ru[j]->eth_params.transp_preference = ETH_RAW_IF4p5_MODE;
+ ru[j]->has_ctrl_prt =1;
LOG_I(PHY,"Setting function for RU %d to NGFI_RRU_IF4p5 (raw)\n",j);
}
}
@@ -3056,6 +3057,7 @@ RU_t **RCconfig_RU(int nb_RU,int nb_L1_inst,PHY_VARS_eNB ***eNB,uint64_t *ru_mas
ru[j]->if_south = REMOTE_IF4p5;
ru[j]->function = NGFI_RAU_IF4p5;
ru[j]->eth_params.transp_preference = ETH_RAW_IF4p5_MODE;
+ ru[j]->has_ctrl_prt = 1;
if (strcmp(*(RUParamList.paramarray[j][RU_IS_SLAVE_IDX].strptr), "yes") == 0) ru[j]->is_slave=1;
else ru[j]->is_slave=0;