Merge branch 'integration_2024_w26' into 'develop'

Integration: `2024.w26`

See merge request oai/openairinterface5g!2815

* !2750 Add Ubuntu 24.04 to/retire Ubuntu 18.04 from supported distributions, use Ubuntu 22 for CI container images
* !2793 Option '-O' in phy simulators to provide a configuration file
* !2797 Increase TX_DATA.request TB buffer size, fix compute_PDU_Length
* !2814 Update documentation and FEATURE SET
* !2720 Remove thread-pool Makefile
* remove extra log
This commit is contained in:
Robert Schmidt
2024-06-26 14:02:52 +00:00
67 changed files with 528 additions and 497 deletions
+4 -31
View File
@@ -21,7 +21,7 @@
# Author: laurent THOMAS, Lionel GAUTHIER # Author: laurent THOMAS, Lionel GAUTHIER
cmake_minimum_required (VERSION 3.12) cmake_minimum_required (VERSION 3.16)
project (OpenAirInterface LANGUAGES C CXX) project (OpenAirInterface LANGUAGES C CXX)
######################################################### #########################################################
@@ -180,22 +180,6 @@ add_boolean_option(SANITIZE_ADDRESS False "enable the address sanitizer (ASan)"
if (SANITIZE_ADDRESS) if (SANITIZE_ADDRESS)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address -fno-omit-frame-pointer -fno-common") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address -fno-omit-frame-pointer -fno-common")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fno-omit-frame-pointer -fno-common") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fno-omit-frame-pointer -fno-common")
# There seems to be some incompatibility with pthread_create and the RT scheduler, which
# results in pthread_create hanging.
#
# When we switch from Ubuntu 16.04 to 18.04, we found that running with the address sanitizer,
# the pthread_create function calls were not working. The inital thought was that we were
# trying to create a thread that was not-blocking and would eventually crash the machine during
# the run. After more debugging, we found that we would never even start the thread. We narrowed
# down the first two instances of pthread_create in the gNB and NR UE to be sctp_eNB_task and
# one_thread, respectively. We found that adding sleeps, and various other pauses to the threads
# had not effect. From there, we found that if we add an abort(); prior to the thread loop, we
# do not execute that. This indicated to us that the problem is not likely to be a non-blocking
# thread, but perhaps and issue with pthread_create itself. From there we begain to research the
# issue on the web. See: https://github.com/google/sanitizers/issues/1125
#
# Google searching indicates this appears to be a problem since at least 2018. This could be something
# wrong in the pthread library, or something subtly wrong in this CMakeLists.txt. Use Ubuntu 20.04 instead.
endif () endif ()
add_boolean_option(SANITIZE_THREAD False "enable the address sanitizer (TSan)" ON) add_boolean_option(SANITIZE_THREAD False "enable the address sanitizer (TSan)" ON)
@@ -650,20 +634,11 @@ add_library(HASHTABLE
include_directories(${OPENAIR_DIR}/common/utils/hashtable) include_directories(${OPENAIR_DIR}/common/utils/hashtable)
add_library(UTIL add_library(UTIL
${OPENAIR_DIR}/common/utils/LOG/log.c
${OPENAIR_DIR}/common/utils/LOG/vcd_signal_dumper.c ${OPENAIR_DIR}/common/utils/LOG/vcd_signal_dumper.c
${OPENAIR2_DIR}/UTIL/MATH/oml.c
${OPENAIR2_DIR}/UTIL/OPT/probe.c ${OPENAIR2_DIR}/UTIL/OPT/probe.c
${OPENAIR_DIR}/common/utils/threadPool/thread-pool.c
${OPENAIR_DIR}/common/utils/utils.c
${OPENAIR_DIR}/common/utils/system.c
${OPENAIR_DIR}/common/utils/time_meas.c
${OPENAIR_DIR}/common/utils/time_stat.c
) )
if (ENABLE_LTTNG) if (ENABLE_LTTNG)
find_package(LTTngUST 2.3.8 EXACT REQUIRED) find_package(LTTngUST 2.3.8 EXACT REQUIRED)
target_sources(UTIL PRIVATE common/utils/LOG/lttng-tp.c)
target_link_libraries(UTIL PUBLIC lttng-ust)
else() else()
message(STATUS "LTTNG support disabled") message(STATUS "LTTNG support disabled")
endif() endif()
@@ -674,7 +649,7 @@ if (cap_FOUND)
target_link_libraries(UTIL PRIVATE cap) target_link_libraries(UTIL PRIVATE cap)
target_compile_definitions(UTIL PRIVATE HAVE_LIB_CAP) target_compile_definitions(UTIL PRIVATE HAVE_LIB_CAP)
endif() endif()
target_link_libraries(UTIL PUBLIC ${T_LIB} pthread) target_link_libraries(UTIL PUBLIC ${T_LIB} pthread LOG thread-pool utils)
set(SECURITY_SRC set(SECURITY_SRC
${OPENAIR3_DIR}/SECU/secu_defs.c ${OPENAIR3_DIR}/SECU/secu_defs.c
@@ -1207,10 +1182,9 @@ set(PHY_MEX_UE
${OPENAIR1_DIR}/PHY/TOOLS/simde_operations.c ${OPENAIR1_DIR}/PHY/TOOLS/simde_operations.c
${OPENAIR1_DIR}/PHY/LTE_UE_TRANSPORT/dlsch_llr_computation_avx2.c ${OPENAIR1_DIR}/PHY/LTE_UE_TRANSPORT/dlsch_llr_computation_avx2.c
${OPENAIR1_DIR}/PHY/LTE_ESTIMATION/lte_ue_measurements.c ${OPENAIR1_DIR}/PHY/LTE_ESTIMATION/lte_ue_measurements.c
${OPENAIR_DIR}/common/utils/LOG/log.c
) )
add_library(PHY_MEX ${PHY_MEX_UE}) add_library(PHY_MEX ${PHY_MEX_UE})
target_link_libraries(PHY_MEX PRIVATE asn1_lte_rrc_hdrs) target_link_libraries(PHY_MEX PRIVATE asn1_lte_rrc_hdrs UTIL)
#Layer 2 library #Layer 2 library
##################### #####################
@@ -1949,10 +1923,9 @@ set(CMAKE_MODULE_PATH "${OPENAIR_DIR}/cmake_targets/tools/MODULES" "${CMAKE_MODU
# add executables for operation # add executables for operation
################################# #################################
add_library(minimal_lib add_library(minimal_lib
${OPENAIR_DIR}/common/utils/LOG/log.c
${OPENAIR_DIR}/common/utils/minimal_stub.c ${OPENAIR_DIR}/common/utils/minimal_stub.c
) )
target_link_libraries(minimal_lib pthread dl ${T_LIB}) target_link_libraries(minimal_lib PUBLIC pthread dl ${T_LIB} LOG)
add_executable(nfapi_test add_executable(nfapi_test
${OPENAIR_DIR}/openair2/NR_PHY_INTERFACE/nfapi_5g_test.c ${OPENAIR_DIR}/openair2/NR_PHY_INTERFACE/nfapi_5g_test.c
+6 -6
View File
@@ -4,12 +4,12 @@
<p align="center"> <p align="center">
<a href="https://gitlab.eurecom.fr/oai/openairinterface5g/-/blob/master/LICENSE"><img src="https://img.shields.io/badge/license-OAI--Public--V1.1-blue" alt="License"></a> <a href="https://gitlab.eurecom.fr/oai/openairinterface5g/-/blob/master/LICENSE"><img src="https://img.shields.io/badge/license-OAI--Public--V1.1-blue" alt="License"></a>
<a href="https://releases.ubuntu.com/18.04/"><img src="https://img.shields.io/badge/OS-Ubuntu18-Green" alt="Supported OS Ubuntu 18"></a>
<a href="https://releases.ubuntu.com/20.04/"><img src="https://img.shields.io/badge/OS-Ubuntu20-Green" alt="Supported OS Ubuntu 20"></a> <a href="https://releases.ubuntu.com/20.04/"><img src="https://img.shields.io/badge/OS-Ubuntu20-Green" alt="Supported OS Ubuntu 20"></a>
<a href="https://releases.ubuntu.com/22.04/"><img src="https://img.shields.io/badge/OS-Ubuntu22-Green" alt="Supported OS Ubuntu 22"></a> <a href="https://releases.ubuntu.com/22.04/"><img src="https://img.shields.io/badge/OS-Ubuntu22-Green" alt="Supported OS Ubuntu 22"></a>
<a href="https://releases.ubuntu.com/24.04/"><img src="https://img.shields.io/badge/OS-Ubuntu24-Green" alt="Supported OS Ubuntu 24"></a>
<a href="https://www.redhat.com/en/technologies/linux-platforms/enterprise-linux"><img src="https://img.shields.io/badge/OS-RHEL8-Green" alt="Supported OS RHEL8"></a> <a href="https://www.redhat.com/en/technologies/linux-platforms/enterprise-linux"><img src="https://img.shields.io/badge/OS-RHEL8-Green" alt="Supported OS RHEL8"></a>
<a href="https://www.redhat.com/en/technologies/linux-platforms/enterprise-linux"><img src="https://img.shields.io/badge/OS-RHEL9-Green" alt="Supported OS RELH9"></a> <a href="https://www.redhat.com/en/technologies/linux-platforms/enterprise-linux"><img src="https://img.shields.io/badge/OS-RHEL9-Green" alt="Supported OS RELH9"></a>
<a href="https://getfedora.org/en/workstation/"><img src="https://img.shields.io/badge/OS-Fedore37-Green" alt="Supported OS Fedora 37"></a> <a href="https://getfedora.org/en/workstation/"><img src="https://img.shields.io/badge/OS-Fedore40-Green" alt="Supported OS Fedora 40"></a>
</p> </p>
<p align="center"> <p align="center">
@@ -70,11 +70,11 @@ openairinterface5g
├── executables : Top-level executable source files (gNB, eNB, ...) ├── executables : Top-level executable source files (gNB, eNB, ...)
├── maketags : Script to generate emacs tags. ├── maketags : Script to generate emacs tags.
├── nfapi : (n)FAPI code for MAC-PHY interface ├── nfapi : (n)FAPI code for MAC-PHY interface
├── openair1 : 3GPP LTE Rel-10/12 PHY layer / 3GPP NR Rel-15 layer. A local Readme file provides more details. ├── openair1 : Layer 1 (3GPP LTE Rel-10/12 PHY, NR Rel-15 PHY)
├── openair2 : 3GPP LTE Rel-10 RLC/MAC/PDCP/RRC/X2AP + LTE Rel-14 M2AP implementation. Also 3GPP NR Rel-15 RLC/MAC/PDCP/RRC/X2AP. ├── openair2 : Layer 2 (3GPP LTE Rel-10 MAC/RLC/PDCP/RRC/X2AP, LTE Rel-14 M2AP, NR Rel-15+ MAC/RLC/PDCP/SDAP/RRC/X2AP/F1AP/E1AP), E2AP
├── openair3 : 3GPP LTE Rel10 for S1AP, NAS GTPV1-U for both ENB and UE. ├── openair3 : Layer 3 (3GPP LTE Rel-10 S1AP/GTP, NR Rel-15 NGAP/GTP)
├── openshift : OpenShift helm charts for some deployment options of OAI ├── openshift : OpenShift helm charts for some deployment options of OAI
├── radio : Drivers for various radios such as USRP, AW2S, RFsim, ... ├── radio : Drivers for various radios such as USRP, AW2S, RFsim, 7.2 FHI, ...
└── targets : Some configuration files; only historical relevance, and might be deleted in the future └── targets : Some configuration files; only historical relevance, and might be deleted in the future
``` ```
+3 -3
View File
@@ -286,7 +286,7 @@ class Containerize():
self.host = result.group(0) self.host = result.group(0)
if self.host == 'Ubuntu': if self.host == 'Ubuntu':
self.cli = 'docker' self.cli = 'docker'
self.dockerfileprefix = '.ubuntu20' self.dockerfileprefix = '.ubuntu22'
self.cliBuildOptions = '' self.cliBuildOptions = ''
elif self.host == 'Red Hat': elif self.host == 'Red Hat':
self.cli = 'sudo podman' self.cli = 'sudo podman'
@@ -321,7 +321,7 @@ class Containerize():
imageNames.append(('oai-nr-cuup', 'nr-cuup', 'oai-nr-cuup-asan', '--build-arg "BUILD_OPTION=--sanitize"')) imageNames.append(('oai-nr-cuup', 'nr-cuup', 'oai-nr-cuup-asan', '--build-arg "BUILD_OPTION=--sanitize"'))
result = re.search('build_cross_arm64', self.imageKind) result = re.search('build_cross_arm64', self.imageKind)
if result is not None: if result is not None:
self.dockerfileprefix = '.ubuntu20.cross-arm64' self.dockerfileprefix = '.ubuntu22.cross-arm64'
# Workaround for some servers, we need to erase completely the workspace # Workaround for some servers, we need to erase completely the workspace
if self.forcedWorkspaceCleanup: if self.forcedWorkspaceCleanup:
@@ -677,7 +677,7 @@ class Containerize():
return False return False
# build ran-unittests image # build ran-unittests image
dockerfile = "ci-scripts/docker/Dockerfile.unittest.ubuntu20" dockerfile = "ci-scripts/docker/Dockerfile.unittest.ubuntu22"
ret = cmd.run(f'docker build --progress=plain --tag ran-unittests:{baseTag} --file {dockerfile} . &> {lSourcePath}/cmake_targets/log/unittest-build.log') ret = cmd.run(f'docker build --progress=plain --tag ran-unittests:{baseTag} --file {dockerfile} . &> {lSourcePath}/cmake_targets/log/unittest-build.log')
if ret.returncode != 0: if ret.returncode != 0:
build_log_name = f'build_log_{self.testCase_id}' build_log_name = f'build_log_{self.testCase_id}'
@@ -21,7 +21,7 @@
#--------------------------------------------------------------------- #---------------------------------------------------------------------
# #
# Dockerfile for the Open-Air-Interface BUILD service # Dockerfile for the Open-Air-Interface BUILD service
# Valid for Ubuntu 20.04 # Valid for Ubuntu 22.04
# #
#--------------------------------------------------------------------- #---------------------------------------------------------------------
@@ -12,7 +12,7 @@
</tr> </tr>
</table> </table>
This page is only valid for an `Ubuntu18` host. This page is only valid for an `Ubuntu 22` host.
**Table of Contents** **Table of Contents**
+1 -3
View File
@@ -12,10 +12,8 @@
</tr> </tr>
</table> </table>
This page is valid for an `Ubuntu18` host. It is also valid for `Ubuntu 22.04`.
It is also valid for `Ubuntu 20.04`.
This tutorial is only valid once this file is merged into the `develop` branch.
# 1. Adapt the `docker-compose` to your environment # # 1. Adapt the `docker-compose` to your environment #
The yaml file is in the following directory: `ci-scripts/yaml_files/5g_l2sim_tdd` The yaml file is in the following directory: `ci-scripts/yaml_files/5g_l2sim_tdd`
@@ -12,7 +12,7 @@
</tr> </tr>
</table> </table>
This page is only valid for an `Ubuntu18` host. This page is only valid for an `Ubuntu 22` host.
**NOTE: this version (2023-01-27) has been updated for the `v1.5.0` version of the `OAI 5G CN`.** **NOTE: this version (2023-01-27) has been updated for the `v1.5.0` version of the `OAI 5G CN`.**
+21 -21
View File
@@ -12,15 +12,15 @@
(Test 10b: 5 MHz, R6-1.FDD (MCS 24,18 PRB), EVA5, 17.5dB (70%)), (Test 10b: 5 MHz, R6-1.FDD (MCS 24,18 PRB), EVA5, 17.5dB (70%)),
(Test 11: 10 MHz, R7.FDD (MCS 25), EVA5, 17.7dB (70%))</desc> (Test 11: 10 MHz, R7.FDD (MCS 25), EVA5, 17.7dB (70%))</desc>
<main_exec>dlsim</main_exec> <main_exec>dlsim</main_exec>
<main_exec_args> -m=5 -g=F -s=-1 -w=1.0 -f=.2 -n=500 -B=50 -c=2 -z=2 -O=60 <main_exec_args> -m=5 -g=F -s=-1 -w=1.0 -f=.2 -n=500 -B=50 -c=2 -z=2 -Tperf=60
-m=4 -g=F -s=0 -w=1.0 -f=.2 -n=500 -B=6 -c=4 -z=2 -O=60 -m=4 -g=F -s=0 -w=1.0 -f=.2 -n=500 -B=6 -c=4 -z=2 -Tperf=60
-m=15 -g=F -s=6.7 -w=1.0 -f=.2 -n=500 -B=50 -c=2 -z=2 -O=60 -m=15 -g=F -s=6.7 -w=1.0 -f=.2 -n=500 -B=50 -c=2 -z=2 -Tperf=60
-m=15 -g=F -s=6.7 -w=1.0 -f=.2 -n=500 -B=25 -c=2 -z=2 -O=60 -m=15 -g=F -s=6.7 -w=1.0 -f=.2 -n=500 -B=25 -c=2 -z=2 -Tperf=60
-m=15 -g=G -s=1.4 -w=1.0 -f=.2 -n=500 -B=50 -c=2 -z=2 -O=25 -m=15 -g=G -s=1.4 -w=1.0 -f=.2 -n=500 -B=50 -c=2 -z=2 -Tperf=25
-m=15 -g=G -s=1.4 -w=1.0 -f=.2 -n=500 -B=25 -c=2 -z=2 -O=25 -m=15 -g=G -s=1.4 -w=1.0 -f=.2 -n=500 -B=25 -c=2 -z=2 -Tperf=25
-m=25 -g=F -s=17.4 -w=1.0 -f=.2 -n=500 -B=25 -c=3 -z=2 -O=60 -m=25 -g=F -s=17.4 -w=1.0 -f=.2 -n=500 -B=25 -c=3 -z=2 -Tperf=60
-m=25 -g=F -s=17.5 -w=1.0 -f=.2 -n=500 -B=25 -c=3 -z=2 -r=1022 -O=60 -m=25 -g=F -s=17.5 -w=1.0 -f=.2 -n=500 -B=25 -c=3 -z=2 -r=1022 -Tperf=60
-m=26 -g=F -s=17.7 -w=1.0 -f=.2 -n=500 -B=50 -c=2 -z=2 -O=60</main_exec_args> -m=26 -g=F -s=17.7 -w=1.0 -f=.2 -n=500 -B=50 -c=2 -z=2 -Tperf=60</main_exec_args>
<tags>test1 test5 test6 test6b test7 test7b test10 test10b test11</tags> <tags>test1 test5 test6 test6b test7 test7b test10 test10b test11</tags>
<search_expr_true>"passed"</search_expr_true> <search_expr_true>"passed"</search_expr_true>
<search_expr_false>segmentation fault|assertion|exiting|fatal</search_expr_false> <search_expr_false>segmentation fault|assertion|exiting|fatal</search_expr_false>
@@ -34,11 +34,11 @@
(TM2 Test 1: 10 MHz, R.11 FDD (MCS 14), EVA5, 6.8 dB (70%)), (TM2 Test 1: 10 MHz, R.11 FDD (MCS 14), EVA5, 6.8 dB (70%)),
(TM2 Test 1b: 5 MHz, R.11-2 FDD (MCS 13), EVA5, 5.9 dB (70%))</desc> (TM2 Test 1b: 5 MHz, R.11-2 FDD (MCS 13), EVA5, 5.9 dB (70%))</desc>
<main_exec>dlsim</main_exec> <main_exec>dlsim</main_exec>
<main_exec_args> -m=26 -g=F -s=17.6 -w=1.0 -f=.2 -n=500 -B=100 -c=2 -z=2 -O=60 <main_exec_args> -m=26 -g=F -s=17.6 -w=1.0 -f=.2 -n=500 -B=100 -c=2 -z=2 -Tperf=60
-m=26 -g=F -s=17.3 -w=1.0 -f=.2 -n=500 -B=100 -c=2 -z=2 -r=1600 -O=60 -m=26 -g=F -s=17.3 -w=1.0 -f=.2 -n=500 -B=100 -c=2 -z=2 -r=1600 -Tperf=60
-m=26 -g=F -s=16.6 -w=1.0 -f=.2 -n=500 -B=100 -c=2 -z=2 -r=1899 -O=60 -m=26 -g=F -s=16.6 -w=1.0 -f=.2 -n=500 -B=100 -c=2 -z=2 -r=1899 -Tperf=60
-m=14 -g=F -s=6.8 -w=1.0 -f=.2 -n=500 -B=50 -c=2 -x=2 -y=2 -z=2 -O=60 -m=14 -g=F -s=6.8 -w=1.0 -f=.2 -n=500 -B=50 -c=2 -x=2 -y=2 -z=2 -Tperf=60
-m=13 -g=F -s=5.9 -w=1.0 -f=.2 -n=500 -B=25 -c=3 -x=2 -y=2 -z=2 -O=60</main_exec_args> -m=13 -g=F -s=5.9 -w=1.0 -f=.2 -n=500 -B=25 -c=3 -x=2 -y=2 -z=2 -Tperf=60</main_exec_args>
<tags>test15 test15b test15c TM2_test1 TM2_test1b</tags> <tags>test15 test15b test15c TM2_test1 TM2_test1b</tags>
<search_expr_true>"passed"</search_expr_true> <search_expr_true>"passed"</search_expr_true>
<search_expr_false>segmentation fault|assertion|exiting|fatal</search_expr_false> <search_expr_false>segmentation fault|assertion|exiting|fatal</search_expr_false>
@@ -53,12 +53,12 @@
(Test 5: 20 MHz, FDD (MCS 5), AWGN, 6dB (70%)), (Test 5: 20 MHz, FDD (MCS 5), AWGN, 6dB (70%)),
(Test 6: 20 MHz, FDD (MCS 16), AWGN, 12 dB (70%))</desc> (Test 6: 20 MHz, FDD (MCS 16), AWGN, 12 dB (70%))</desc>
<main_exec>ulsim</main_exec> <main_exec>ulsim</main_exec>
<main_exec_args> -BnbRBs=25 -mcs=5 -yN_rx=1 -gchannel=N -xTransmission=1 -snr=6 -wsnrInterrupt=1.0 -e_snr_step=.1 -P -nb_frame=500 -Operf=70 <main_exec_args> -BnbRBs=25 -mcs=5 -yN_rx=1 -gchannel=N -xTransmission=1 -snr=6 -wsnrInterrupt=1.0 -e_snr_step=.1 -P -nb_frame=500 -Tperf=70
-BnbRBs=25 -mcs=16 -yN_rx=1 -gchannel=N -xTransmission=1 -snr=12 -wsnrInterrupt=1.0 -e_snr_step=.1 -P -nb_frame=500 -Operf=70 -BnbRBs=25 -mcs=16 -yN_rx=1 -gchannel=N -xTransmission=1 -snr=12 -wsnrInterrupt=1.0 -e_snr_step=.1 -P -nb_frame=500 -Tperf=70
-BnbRBs=50 -mcs=5 -yN_rx=1 -gchannel=N -xTransmission=1 -snr=6 -wsnrInterrupt=1.0 -e_snr_step=.1 -P -nb_frame=500 -Operf=70 -BnbRBs=50 -mcs=5 -yN_rx=1 -gchannel=N -xTransmission=1 -snr=6 -wsnrInterrupt=1.0 -e_snr_step=.1 -P -nb_frame=500 -Tperf=70
-BnbRBs=50 -mcs=16 -yN_rx=1 -gchannel=N -xTransmission=1 -snr=12 -wsnrInterrupt=1.0 -e_snr_step=.1 -P -nb_frame=500 -Operf=70 -BnbRBs=50 -mcs=16 -yN_rx=1 -gchannel=N -xTransmission=1 -snr=12 -wsnrInterrupt=1.0 -e_snr_step=.1 -P -nb_frame=500 -Tperf=70
-BnbRBs=100 -mcs=5 -yN_rx=1 -gchannel=N -xTransmission=1 -snr=6 -wsnrInterrupt=1.0 -e_snr_step=.1 -P -nb_frame=500 -Operf=70 -BnbRBs=100 -mcs=5 -yN_rx=1 -gchannel=N -xTransmission=1 -snr=6 -wsnrInterrupt=1.0 -e_snr_step=.1 -P -nb_frame=500 -Tperf=70
-BnbRBs=100 -mcs=16 -yN_rx=1 -gchannel=N -xTransmission=1 -snr=12 -wsnrInterrupt=1.0 -e_snr_step=.1 -P -nb_frame=500 -Operf=70 </main_exec_args> -BnbRBs=100 -mcs=16 -yN_rx=1 -gchannel=N -xTransmission=1 -snr=12 -wsnrInterrupt=1.0 -e_snr_step=.1 -P -nb_frame=500 -Tperf=70</main_exec_args>
<tags>test1 test2 test3 test4 test5 test6</tags> <tags>test1 test2 test3 test4 test5 test6</tags>
<search_expr_true>"passed"</search_expr_true> <search_expr_true>"passed"</search_expr_true>
<search_expr_false>segmentation fault|assertion|exiting|fatal</search_expr_false> <search_expr_false>segmentation fault|assertion|exiting|fatal</search_expr_false>
@@ -116,7 +116,7 @@
<main_exec>nr_pbchsim</main_exec> <main_exec>nr_pbchsim</main_exec>
<main_exec_args>-s-11 -S-8 -n10 -R106 -N2 <main_exec_args>-s-11 -S-8 -n10 -R106 -N2
-s-11 -S-8 -n10 -o8000 -I -R106 -s-11 -S-8 -n10 -o8000 -I -R106
-s-11 -S-8 -n10 -R106 -O6</main_exec_args> -s-11 -S-8 -n10 -R106 -c6</main_exec_args>
<tags>test1 test2 test3</tags> <tags>test1 test2 test3</tags>
<search_expr_true>PBCH test OK</search_expr_true> <search_expr_true>PBCH test OK</search_expr_true>
<search_expr_false>segmentation fault|assertion|exiting|fatal</search_expr_false> <search_expr_false>segmentation fault|assertion|exiting|fatal</search_expr_false>
+1 -2
View File
@@ -52,7 +52,7 @@ TARGET_LIST=""
function print_help() { function print_help() {
echo_info " echo_info "
This script compiles OpenAirInterface Software, and can install dependencies This script compiles OpenAirInterface Software, and can install dependencies
for a number of distributions (Ubuntu 18-22, Fedora, RHEL7/8). for a number of distributions (Ubuntu 22-24, Fedora, RHEL9).
Options: Options:
--arch-native --arch-native
Passes -march=native to the compiler. Passes -march=native to the compiler.
@@ -418,7 +418,6 @@ function main() {
CMAKE_CMD="$CMAKE_CMD -DSANITIZE_ADDRESS=True -DSANITIZE_UNDEFINED=True" CMAKE_CMD="$CMAKE_CMD -DSANITIZE_ADDRESS=True -DSANITIZE_UNDEFINED=True"
shift;; shift;;
--sanitize-address | -fsanitize=address) --sanitize-address | -fsanitize=address)
grep -sq "Ubuntu 18.04" /etc/os-release && echo_error "Bug in OS with this option, see CMakeLists.txt"
CMAKE_CMD="$CMAKE_CMD -DSANITIZE_ADDRESS=True" CMAKE_CMD="$CMAKE_CMD -DSANITIZE_ADDRESS=True"
shift;; shift;;
--sanitize-undefined | -fsanitize=undefined) --sanitize-undefined | -fsanitize=undefined)
+2 -2
View File
@@ -1,8 +1,8 @@
set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm) set(CMAKE_SYSTEM_PROCESSOR arm)
set(CMAKE_C_COMPILER /usr/bin/aarch64-linux-gnu-gcc-9) set(CMAKE_C_COMPILER /usr/bin/aarch64-linux-gnu-gcc-11)
set(CMAKE_CXX_COMPILER /usr/bin/aarch64-linux-gnu-g++-9) set(CMAKE_CXX_COMPILER /usr/bin/aarch64-linux-gnu-g++-11)
set(CROSS_COMPILE 1) set(CROSS_COMPILE 1)
set(bnProc_gen_128_DIR ${CMAKE_CURRENT_BINARY_DIR}/${NATIVE_DIR}) # /../build) set(bnProc_gen_128_DIR ${CMAKE_CURRENT_BINARY_DIR}/${NATIVE_DIR}) # /../build)
+3 -21
View File
@@ -103,11 +103,11 @@ get_distribution_release() {
check_supported_distribution() { check_supported_distribution() {
local distribution=$(get_distribution_release) local distribution=$(get_distribution_release)
case "$distribution" in case "$distribution" in
"ubuntu24.04") return 0 ;;
"ubuntu23.10") return 0 ;; "ubuntu23.10") return 0 ;;
"ubuntu22.04") return 0 ;; "ubuntu22.04") return 0 ;;
"ubuntu21.04") return 0 ;; "ubuntu21.04") return 0 ;;
"ubuntu20.04") return 0 ;; "ubuntu20.04") return 0 ;;
"ubuntu18.04") return 0 ;;
"debian11") return 0 ;; "debian11") return 0 ;;
"fedora36") return 0 ;; "fedora36") return 0 ;;
"fedora37") return 0 ;; "fedora37") return 0 ;;
@@ -321,7 +321,7 @@ check_install_usrp_uhd_driver(){
$SUDO apt-get remove libuhd3.14.1 -y || true $SUDO apt-get remove libuhd3.14.1 -y || true
$SUDO apt-get remove libuhd3.15.0 -y || true $SUDO apt-get remove libuhd3.15.0 -y || true
local distribution=$(get_distribution_release) local distribution=$(get_distribution_release)
if [[ "$distribution" == "ubuntu18.04" || "$distribution" == "ubuntu20.04" || "$distribution" == "ubuntu22.04" ]]; then if [[ "$distribution" == "ubuntu20.04" || "$distribution" == "ubuntu22.04" ]]; then
$SUDO apt-get remove libuhd4.?.? -y || true $SUDO apt-get remove libuhd4.?.? -y || true
fi fi
v=$(lsb_release -cs) v=$(lsb_release -cs)
@@ -351,7 +351,7 @@ check_install_usrp_uhd_driver(){
$SUDO apt-get update $SUDO apt-get update
$SUDO apt-get -y install python-tk $boost_libs_ubuntu libusb-1.0-0-dev $SUDO apt-get -y install python-tk $boost_libs_ubuntu libusb-1.0-0-dev
case "$(get_distribution_release)" in case "$(get_distribution_release)" in
"ubuntu18.04" | "ubuntu20.04" | "ubuntu22.04") "ubuntu20.04" | "ubuntu22.04")
$SUDO apt-get -y install libuhd-dev libuhd4.5.0 uhd-host $SUDO apt-get -y install libuhd-dev libuhd4.5.0 uhd-host
;; ;;
esac esac
@@ -528,24 +528,11 @@ check_install_soapy () {
install_soapy_iris_from_source install_soapy_iris_from_source
} }
# for ubuntu 18 we need a special repository (https://apt.kitware.com/) to install cmake >= 3.12
add_cmake_repo () {
$SUDO $INSTALLER -y install wget
wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | gpg --dearmor - | $SUDO tee /usr/share/keyrings/kitware-archive-keyring.gpg >/dev/null
echo 'deb [signed-by=/usr/share/keyrings/kitware-archive-keyring.gpg] https://apt.kitware.com/ubuntu/ bionic main' | $SUDO tee /etc/apt/sources.list.d/kitware.list >/dev/null
$SUDO $INSTALLER -y update
$SUDO rm /usr/share/keyrings/kitware-archive-keyring.gpg
$SUDO $INSTALLER -y install kitware-archive-keyring
}
check_install_additional_tools (){ check_install_additional_tools (){
$SUDO $INSTALLER update -y $SUDO $INSTALLER update -y
local optional_packages="" local optional_packages=""
if [[ "$OS_BASEDISTRO" == "debian" ]]; then if [[ "$OS_BASEDISTRO" == "debian" ]]; then
case "$(get_distribution_release)" in case "$(get_distribution_release)" in
"ubuntu18.04")
optional_packages="python-dev python-pip python-pyroute2 python python-numpy python-scipy python-matplotlib ctags"
;;
"ubuntu20.04" | "ubuntu21.04" | "ubuntu22.04" | "debian11" ) "ubuntu20.04" | "ubuntu21.04" | "ubuntu22.04" | "debian11" )
optional_packages="python3 python3-pip python3-dev python3-scipy python3-matplotlib python3-pyroute2 universal-ctags" optional_packages="python3 python3-pip python3-dev python3-scipy python3-matplotlib python3-pyroute2 universal-ctags"
;; ;;
@@ -586,10 +573,6 @@ check_install_oai_software() {
if [[ "$OS_BASEDISTRO" == "debian" ]]; then if [[ "$OS_BASEDISTRO" == "debian" ]]; then
$SUDO apt install -y software-properties-common $SUDO apt install -y software-properties-common
case "$(get_distribution_release)" in case "$(get_distribution_release)" in
"ubuntu18.04")
add_cmake_repo
specific_packages=""
;;
"debian11") "debian11")
specific_packages="libz-dev" specific_packages="libz-dev"
;; ;;
@@ -602,7 +585,6 @@ check_install_oai_software() {
ninja-build \ ninja-build \
pkg-config \ pkg-config \
git \ git \
libatlas-base-dev \
libblas-dev \ libblas-dev \
liblapack-dev \ liblapack-dev \
liblapacke-dev \ liblapacke-dev \
+5
View File
@@ -11,3 +11,8 @@ endif()
add_subdirectory(T) add_subdirectory(T)
add_subdirectory(nr) add_subdirectory(nr)
add_subdirectory(LOG)
add_subdirectory(threadPool)
add_library(utils utils.c system.c time_meas.c time_stat.c)
target_include_directories(utils PUBLIC .)
target_link_libraries(utils PRIVATE ${T_LIB})
+10
View File
@@ -0,0 +1,10 @@
set(log_sources log.c)
if (ENABLE_LTTNG)
set(log_sources ${log_sources} lttng-tp.c)
endif()
add_library(LOG ${log_sources})
target_include_directories(LOG PUBLIC .)
target_link_libraries(LOG PRIVATE ${T_LIB})
if (ENABLE_LTTNG)
target_link_libraries(LOG PUBLIC lttng-ust)
endif()
+6
View File
@@ -0,0 +1,6 @@
if (ENABLE_TESTS)
add_subdirectory(test)
endif()
add_library(thread-pool thread-pool.c)
target_link_libraries(thread-pool PRIVATE utils)
target_include_directories(thread-pool PUBLIC .)
-3
View File
@@ -1,3 +0,0 @@
thread-pool-test: thread-pool.c thread-pool.h
gcc -g -O3 thread-pool.c -I ${OPENAIR_DIR}/nfapi/open-nFAPI/nfapi/public_inc -I ${OPENAIR_DIR}/ -I ${OPENAIR_DIR}/common/utils/ -I. -I ${OPENAIR_DIR}/openair2/COMMON ${OPENAIR_DIR}/common/utils/system.c ${OPENAIR_DIR}/common/utils/LOG/log.c ${OPENAIR_DIR}/common/config/config_userapi.c ${OPENAIR_DIR}/common/config/config_load_configmodule.c ${OPENAIR_DIR}/common/config/config_cmdline.c -lpthread -ldl -D TEST_THREAD_POOL -DMAX_NUM_CCs=1 -I../LOG -I../../utils/T -o thread-pool-test
@@ -0,0 +1,6 @@
add_executable(test_thread-pool
test_thread-pool.c)
add_dependencies(tests test_thread-pool)
target_link_libraries(test_thread-pool PRIVATE thread-pool pthread LOG minimal_lib)
add_test(NAME test_thread-pool
COMMAND ./test_thread-pool)
@@ -0,0 +1,133 @@
/*
* 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 <sched.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <unistd.h>
#include <ctype.h>
#include <sys/sysinfo.h>
#include <threadPool/thread-pool.h>
#include "log.h"
void displayList(notifiedFIFO_t *nf)
{
int n = 0;
notifiedFIFO_elt_t *ptr = nf->outF;
while (ptr) {
printf("element: %d, key: %lu\n", ++n, ptr->key);
ptr = ptr->next;
}
printf("End of list: %d elements\n", n);
}
struct testData {
int id;
int sleepTime;
char txt[30];
};
void processing(void *arg)
{
struct testData *in = (struct testData *)arg;
// printf("doing: %d, %s, in thr %ld\n",in->id, in->txt,pthread_self() );
sprintf(in->txt, "Done by %ld, job %d", pthread_self(), in->id);
in->sleepTime = rand() % 1000;
usleep(in->sleepTime);
// printf("done: %d, %s, in thr %ld\n",in->id, in->txt,pthread_self() );
}
int main()
{
logInit();
notifiedFIFO_t myFifo;
initNotifiedFIFO(&myFifo);
pushNotifiedFIFO(&myFifo, newNotifiedFIFO_elt(sizeof(struct testData), 1234, NULL, NULL));
for (int i = 10; i > 1; i--) {
pushNotifiedFIFO(&myFifo, newNotifiedFIFO_elt(sizeof(struct testData), 1000 + i, NULL, NULL));
}
displayList(&myFifo);
notifiedFIFO_elt_t *tmp = pullNotifiedFIFO(&myFifo);
printf("pulled: %lu\n", tmp->key);
displayList(&myFifo);
tmp = pullNotifiedFIFO(&myFifo);
printf("pulled: %lu\n", tmp->key);
displayList(&myFifo);
pushNotifiedFIFO(&myFifo, newNotifiedFIFO_elt(sizeof(struct testData), 12345678, NULL, NULL));
displayList(&myFifo);
do {
tmp = pollNotifiedFIFO(&myFifo);
if (tmp) {
printf("pulled: %lu\n", tmp->key);
displayList(&myFifo);
} else
printf("Empty list \n");
} while (tmp);
tpool_t pool;
char params[] = "1,2,3,4,5";
initTpool(params, &pool, true);
notifiedFIFO_t worker_back;
initNotifiedFIFO(&worker_back);
//sleep(1);
int cumulProcessTime = 0;
struct timespec st, end;
clock_gettime(CLOCK_MONOTONIC, &st);
int nb_jobs = 4;
for (int i = 0; i < 1000; i++) {
int parall = nb_jobs;
for (int j = 0; j < parall; j++) {
notifiedFIFO_elt_t *work = newNotifiedFIFO_elt(sizeof(struct testData), i, &worker_back, processing);
struct testData *x = (struct testData *)NotifiedFifoData(work);
x->id = i;
pushTpool(&pool, work);
}
int sleepmax = 0;
while (parall) {
tmp = pullTpool(&worker_back, &pool);
if (tmp) {
parall--;
struct testData *dd = NotifiedFifoData(tmp);
if (dd->sleepTime > sleepmax)
sleepmax = dd->sleepTime;
delNotifiedFIFO_elt(tmp);
}
}
cumulProcessTime += sleepmax;
}
clock_gettime(CLOCK_MONOTONIC, &end);
long long dur = (end.tv_sec - st.tv_sec) * 1000 * 1000 + (end.tv_nsec - st.tv_nsec) / 1000;
printf("In µs, Total time per group of %d job:%lld, work time per job %d, overhead per job %lld\n",
nb_jobs,
dur / 1000,
cumulProcessTime / 1000,
(dur - cumulProcessTime) / (1000 * nb_jobs));
return 0;
}
-129
View File
@@ -33,17 +33,6 @@
#include <sys/sysinfo.h> #include <sys/sysinfo.h>
#include <threadPool/thread-pool.h> #include <threadPool/thread-pool.h>
void displayList(notifiedFIFO_t *nf) {
int n=0;
notifiedFIFO_elt_t *ptr=nf->outF;
while(ptr) {
printf("element: %d, key: %lu\n",++n,ptr->key);
ptr=ptr->next;
}
printf("End of list: %d elements\n",n);
}
static inline notifiedFIFO_elt_t *pullNotifiedFifoRemember( notifiedFIFO_t *nf, struct one_thread *thr) { static inline notifiedFIFO_elt_t *pullNotifiedFifoRemember( notifiedFIFO_t *nf, struct one_thread *thr) {
mutexlock(nf->lockF); mutexlock(nf->lockF);
@@ -176,121 +165,3 @@ void initFloatingCoresTpool(int nbThreads,tpool_t *pool, bool performanceMeas, c
threads[sizeof(threads)-1]=0; threads[sizeof(threads)-1]=0;
initNamedTpool(threads, pool, performanceMeas, name); initNamedTpool(threads, pool, performanceMeas, name);
} }
#ifdef TEST_THREAD_POOL
int oai_exit = 0;
void exit_function(const char *file, const char *function, const int line, const char *s, const int assert)
{
if (assert) {
abort();
} else {
exit(EXIT_SUCCESS);
}
}
struct testData {
int id;
int sleepTime;
char txt[30];
};
void processing(void *arg) {
struct testData *in=(struct testData *)arg;
//printf("doing: %d, %s, in thr %ld\n",in->id, in->txt,pthread_self() );
sprintf(in->txt,"Done by %ld, job %d", pthread_self(), in->id);
in->sleepTime=rand()%1000;
usleep(in->sleepTime);
//printf("done: %d, %s, in thr %ld\n",in->id, in->txt,pthread_self() );
}
int main() {
notifiedFIFO_t myFifo;
initNotifiedFIFO(&myFifo);
pushNotifiedFIFO(&myFifo,newNotifiedFIFO_elt(sizeof(struct testData), 1234,NULL,NULL));
for(int i=10; i>1; i--) {
pushNotifiedFIFO(&myFifo,newNotifiedFIFO_elt(sizeof(struct testData), 1000+i,NULL,NULL));
}
displayList(&myFifo);
notifiedFIFO_elt_t *tmp=pullNotifiedFIFO(&myFifo);
printf("pulled: %lu\n", tmp->key);
displayList(&myFifo);
tmp=pullNotifiedFIFO(&myFifo);
printf("pulled: %lu\n", tmp->key);
displayList(&myFifo);
pushNotifiedFIFO(&myFifo,newNotifiedFIFO_elt(sizeof(struct testData), 12345678, NULL, NULL));
displayList(&myFifo);
do {
tmp=pollNotifiedFIFO(&myFifo);
if (tmp) {
printf("pulled: %lu\n", tmp->key);
displayList(&myFifo);
} else
printf("Empty list \n");
} while(tmp);
tpool_t pool;
char params[]="1,2,3,4,5";
initTpool(params,&pool, true);
notifiedFIFO_t worker_back;
initNotifiedFIFO(&worker_back);
sleep(1);
int cumulProcessTime=0, cumulTime=0;
struct timespec st,end;
clock_gettime(CLOCK_MONOTONIC, &st);
int nb_jobs=4;
for (int i=0; i <1000 ; i++) {
int parall=nb_jobs;
for (int j=0; j <parall ; j++) {
notifiedFIFO_elt_t *work=newNotifiedFIFO_elt(sizeof(struct testData), i, &worker_back, processing);
struct testData *x=(struct testData *)NotifiedFifoData(work);
x->id=i;
pushTpool(&pool, work);
}
int sleepmax=0;
while (parall) {
tmp=pullTpool(&worker_back,&pool);
if (tmp) {
parall--;
struct testData *dd=NotifiedFifoData(tmp);
if (dd->sleepTime > sleepmax)
sleepmax=dd->sleepTime;
delNotifiedFIFO_elt(tmp);
}
}
cumulProcessTime+=sleepmax;
}
clock_gettime(CLOCK_MONOTONIC, &end);
long long dur=(end.tv_sec-st.tv_sec)*1000*1000+(end.tv_nsec-st.tv_nsec)/1000;
printf("In µs, Total time per group of %d job:%lld, work time per job %d, overhead per job %lld\n",
nb_jobs, dur/1000, cumulProcessTime/1000, (dur-cumulProcessTime)/(1000*nb_jobs));
/*
for (int i=0; i <1000 ; i++) {
notifiedFIFO_elt_t *work=newNotifiedFIFO_elt(sizeof(struct testData), i, &worker_back, processing);
struct testData *x=(struct testData *)NotifiedFifoData(work);
x->id=i;
pushTpool(&pool, work);
}
do {
tmp=pullTpool(&worker_back,&pool);
if (tmp) {
struct testData *dd=NotifiedFifoData(tmp);
printf("Result: %s\n",dd->txt);
delNotifiedFIFO_elt(tmp);
} else
printf("Empty list \n");
abortTpoolJob(&pool,510);
} while(tmp);
*/
return 0;
}
#endif
+2 -2
View File
@@ -202,8 +202,8 @@ With the nvIPC sources in the project directory, the docker image can be built.
In order to build the final image, there is an intermediary image to be built (ran-base) In order to build the final image, there is an intermediary image to be built (ran-base)
```bash ```bash
~$ cd ~/openairinterface5g/ ~$ cd ~/openairinterface5g/
~/openairinterface5g$ docker build . -f docker/Dockerfile.base.ubuntu20 --tag ran-base:latest ~/openairinterface5g$ docker build . -f docker/Dockerfile.base.ubuntu22 --tag ran-base:latest
~/openairinterface5g$ docker build . -f docker/Dockerfile.gNB.aerial.ubuntu20 --tag oai-gnb-aerial:latest ~/openairinterface5g$ docker build . -f docker/Dockerfile.gNB.aerial.ubuntu22 --tag oai-gnb-aerial:latest
``` ```
+1 -1
View File
@@ -149,7 +149,7 @@ cd openairinterface5g/cmake_targets/
After completing the build, the binaries are available in the `cmake_targets/ran_build/build` directory. After completing the build, the binaries are available in the `cmake_targets/ran_build/build` directory.
Detailed information about these simulators can be found [in this dedicated page](https://gitlab.eurecom.fr/oai/openairinterface5g/wikis/OpenAirLTEPhySimul) Detailed information about these simulators can be found [in the dedicated page](./physical-simulators.md)
## Building UEs, eNodeB and gNodeB Executables ## Building UEs, eNodeB and gNodeB Executables
+7 -10
View File
@@ -117,9 +117,7 @@ Furthermore, the gNB and UE support
- evalution of RSRP report - evalution of RSRP report
- evaluation of CQI report - evaluation of CQI report
- MAC scheduling of SR reception - MAC scheduling of SR reception
- Bandwidth part (BWP) operation - Support of up to 16 UEs (can be increased to 32)
- Handle multiple dedicated BWPs, supports one UE
- BWP switching through RRCReconfiguration method
## gNB RLC ## gNB RLC
@@ -154,18 +152,15 @@ Furthermore, the gNB and UE support
- NR RRC (38.331) Rel 17 messages using new [asn1c](https://github.com/mouse07410/asn1c) - NR RRC (38.331) Rel 17 messages using new [asn1c](https://github.com/mouse07410/asn1c)
- LTE RRC (36.331) also updated to Rel 15 - LTE RRC (36.331) also updated to Rel 15
- Generation of CellGroupConfig (for eNB) and MIB - Generation of MIB/SIB1 (received from DU)
- Generation of system information block 1 (SIB1)
- Generation of system information block 2 (SIB2)
- Application to read configuration file and program gNB RRC
- RRC can configure PDCP, RLC, MAC - RRC can configure PDCP, RLC, MAC
- Interface with GTP-U (tunnel creation/handling for S1-U (NSA), N3 (SA) interfaces) - Interface with GTP-U (tunnel creation/handling for S1-U (NSA), N3 (SA), F1 interfaces)
- Integration of RRC messages and procedures supporting UE 5G SA connection - Integration of RRC messages and procedures supporting UE 5G SA connection
- RRCSetupRequest/RRCSetup/RRCSetupComplete - RRCSetupRequest/RRCSetup/RRCSetupComplete
- RRC Uplink/Downlink Information transfer carrying NAS messages transparently - RRC Uplink/Downlink Information transfer carrying NAS messages transparently
- RRC Reconfiguration/Reconfiguration complete - RRC Reconfiguration/Reconfiguration complete
- RRC Reestablishment/Reestablishment complete - RRC Reestablishment/Reestablishment complete
- Support for master cell group configuration - Support for MasterCellGroup configuration (from DU)
- Interface with NGAP for the interactions with the AMF - Interface with NGAP for the interactions with the AMF
- Interface with F1AP for CU/DU split deployment option - Interface with F1AP for CU/DU split deployment option
- Periodic RRC measurements of serving cell (no A/B events) - Periodic RRC measurements of serving cell (no A/B events)
@@ -200,7 +195,8 @@ Furthermore, the gNB and UE support
- F1 UE Context release req/cmd/complete - F1 UE Context release req/cmd/complete
- F1 gNB CU configuration update - F1 gNB CU configuration update
- Interface with RRC - Interface with RRC
- Interface with gtp-u (tunnel creation/handling for F1-U interface) - Interface with GTP-u (tunnel creation/handling for F1-U interface)
- One CU(-CP) can handle multiple DUs
## gNB E1AP ## gNB E1AP
@@ -216,6 +212,7 @@ Furthermore, the gNB and UE support
- E1 Bearer Context Modification Request - E1 Bearer Context Modification Request
- E1 Bearer Context Modification Response - E1 Bearer Context Modification Response
- Interface with RRC and PDCP - Interface with RRC and PDCP
- One CU-CP can handle multiple CU-UPs
## gNB GTP-U ## gNB GTP-U
+29 -29
View File
@@ -1,58 +1,58 @@
The OpenAirInterface software can be obtained from our gitLab The OpenAirInterface software can be obtained from our gitLab server. You will
server. You will need a git client to get the sources. The repository need a git client to get the sources. The repository is used for main
is currently used for main developments. developments.
# Prerequisites # Prerequisites
You need to install git using the following commands: You need to install `git` using the following commands:
```shell ```shell
sudo apt-get update sudo apt-get update
sudo apt-get install git sudo apt-get install git
``` ```
# Using EURECOM Gitlab # Clone the Git repository (for OAI Users without login to gitlab server)
The [openairinterface5g repository](https://gitlab.eurecom.fr/oai/openairinterface5g.git) The [openairinterface5g repository](https://gitlab.eurecom.fr/oai/openairinterface5g.git)
holds the source code for the RAN (4G and 5G). holds the source code for the RAN (4G and 5G).
Configure git with your name/email address (only important if you are developer and want to contribute/push code to Git Repository): ## All users, anonymous access
Clone the RAN repository:
```shell
git clone https://gitlab.eurecom.fr/oai/openairinterface5g.git
```
## For contributors
Configure git with your name/email address, important if you are developer and
want to contribute by pushing code. Please put your full name and the e-mail
address you use in Gitlab.
```shell ```shell
git config --global user.name "Your Name" git config --global user.name "Your Name"
git config --global user.email "Your email address" git config --global user.email "Your email address"
``` ```
## In order to clone the Git repository (for OAI Users without login to gitlab server) More information can be found in [the contributing page](../CONTRIBUTING.md).
Cloning RAN repository:
```shell
git clone https://gitlab.eurecom.fr/oai/openairinterface5g.git
```
## In order to contribute to the Git RAN repository (for OAI Developers/admins with login to gitlab server)
Please send email to [contact@openairinterface.org](mailto:contact@openairinterface.org) to be added to the repository
as a developer (only important for users who want to commit code to the repository). If
you do not have account on gitlab.eurecom.fr, please register yourself to gitlab.eurecom.fr and provide the login name in the email.
More information can be found in [a separate page](../CONTRIBUTING.md).
# Which branch to checkout? # Which branch to checkout?
`develop`: contains recent commits that are tested on our CI test bench. The update frequency is about once a week. 5G is only in this branch. It is the recommended and default branch. - `develop`: contains recent commits that are tested on our CI test bench. The
`master`: contains a stable version of 4G, and will be updated in the future with 5G. update frequency is about once a week. 5G is only in this branch. **It is the
recommended and default branch.**
- `master`: contains a known stable version.
Please see the work flow and policies page: https://gitlab.eurecom.fr/oai/openairinterface5g/wikis/oai-policies-home You can find the latest stable tag release here:
https://gitlab.eurecom.fr/oai/openairinterface5g/tags
You can find the latest stable tag release here: https://gitlab.eurecom.fr/oai/openairinterface5g/tags
The tag naming conventions are: The tag naming conventions are:
- On `master` branch: **v1.`x`.`y`** where - On `master` branch: **v`x`.`y`.`z`**
* `x` is the minor release number, incremented every 2-3 months when we are merging `develop` into `master` branch.
* `y` is the maintenance number, starting at 0 when we do a minor release and being incremented when a bug fix is incorporated into `master` branch.
- On `develop` branch **`yyyy`.w`xx`** - On `develop` branch **`yyyy`.w`xx`**
* `yyyy` is the calendar year * `yyyy` is the calendar year
* `xx` the week number within the year * `xx` the week number within the year
More information on work flow and policies can be found in [this
document](./code-style-contrib.md).
+12 -12
View File
@@ -89,8 +89,8 @@ information on how the images are built.
- [RAN-ARM-Cross-Compile-Builder](https://jenkins-oai.eurecom.fr/job/RAN-ARM-Cross-Compile-Builder/) - [RAN-ARM-Cross-Compile-Builder](https://jenkins-oai.eurecom.fr/job/RAN-ARM-Cross-Compile-Builder/)
~BUILD-ONLY ~4G-LTE ~5G-NR ~BUILD-ONLY ~4G-LTE ~5G-NR
- orion: Cross-compilation from Intel to ARM - orion: Cross-compilation from Intel to ARM
- base image from `Dockerfile.base.ubuntu20.cross-arm64` - base image from `Dockerfile.base.ubuntu22.cross-arm64`
- build image from `Dockerfile.build.ubuntu20.cross-arm64` (no target images) - build image from `Dockerfile.build.ubuntu22.cross-arm64` (no target images)
- [RAN-cppcheck](https://jenkins-oai.eurecom.fr/job/RAN-cppcheck/) - [RAN-cppcheck](https://jenkins-oai.eurecom.fr/job/RAN-cppcheck/)
~BUILD-ONLY ~4G-LTE ~5G-NR ~BUILD-ONLY ~4G-LTE ~5G-NR
- bellatrix - bellatrix
@@ -112,16 +112,16 @@ information on how the images are built.
- [RAN-Ubuntu18-Image-Builder](https://jenkins-oai.eurecom.fr/job/RAN-Ubuntu18-Image-Builder/) - [RAN-Ubuntu18-Image-Builder](https://jenkins-oai.eurecom.fr/job/RAN-Ubuntu18-Image-Builder/)
~BUILD-ONLY ~4G-LTE ~5G-NR ~BUILD-ONLY ~4G-LTE ~5G-NR
- run formatting check from `ci-scripts/docker/Dockerfile.formatting.bionic` - run formatting check from `ci-scripts/docker/Dockerfile.formatting.bionic`
- obelix: Ubuntu 20 image build using docker (Note: builds U20 images while pipeline is named U18!) - obelix: Ubuntu 22 image build using docker (Note: builds U22 images while pipeline is named U18!)
- base image from `Dockerfile.base.ubuntu20` - base image from `Dockerfile.base.ubuntu22`
- build image from `Dockerfile.build.ubuntu20`, followed by - build image from `Dockerfile.build.ubuntu22`, followed by
- target image from `Dockerfile.eNB.ubuntu20` - target image from `Dockerfile.eNB.ubuntu22`
- target image from `Dockerfile.gNB.ubuntu20` - target image from `Dockerfile.gNB.ubuntu22`
- target image from `Dockerfile.nr-cuup.ubuntu20` - target image from `Dockerfile.nr-cuup.ubuntu22`
- target image from `Dockerfile.nrUE.ubuntu20` - target image from `Dockerfile.nrUE.ubuntu22`
- target image from `Dockerfile.lteUE.ubuntu20` - target image from `Dockerfile.lteUE.ubuntu22`
- target image from `Dockerfile.lteRU.ubuntu20` - target image from `Dockerfile.lteRU.ubuntu22`
- build unit tests from `ci-scripts/docker/Dockerfile.unittest.ubuntu20`, and run them - build unit tests from `ci-scripts/docker/Dockerfile.unittest.ubuntu22`, and run them
#### Image Test pipelines #### Image Test pipelines
+19 -15
View File
@@ -5,7 +5,7 @@
## Environment ## Environment
- OS: ubuntu 20.04 - OS: ubuntu 22.04
### Set up the environment ### Set up the environment
@@ -15,21 +15,21 @@ Set up for install the package for aarch64.
sudo dpkg --add-architecture arm64 sudo dpkg --add-architecture arm64
echo -e \ echo -e \
"deb [arch=arm64] http://ports.ubuntu.com/ focal main restricted\n"\ "deb [arch=arm64] http://ports.ubuntu.com/ jammy main restricted\n"\
"deb [arch=arm64] http://ports.ubuntu.com/ focal-updates main restricted\n"\ "deb [arch=arm64] http://ports.ubuntu.com/ jammy-updates main restricted\n"\
"deb [arch=arm64] http://ports.ubuntu.com/ focal universe\n"\ "deb [arch=arm64] http://ports.ubuntu.com/ jammy universe\n"\
"deb [arch=arm64] http://ports.ubuntu.com/ focal-updates universe\n"\ "deb [arch=arm64] http://ports.ubuntu.com/ jammy-updates universe\n"\
"deb [arch=arm64] http://ports.ubuntu.com/ focal multiverse\n"\ "deb [arch=arm64] http://ports.ubuntu.com/ jammy multiverse\n"\
"deb [arch=arm64] http://ports.ubuntu.com/ focal-updates multiverse\n"\ "deb [arch=arm64] http://ports.ubuntu.com/ jammy-updates multiverse\n"\
"deb [arch=arm64] http://ports.ubuntu.com/ focal-backports main restricted universe multiverse"\ "deb [arch=arm64] http://ports.ubuntu.com/ jammy-backports main restricted universe multiverse"\
| sudo tee /etc/apt/sources.list.d/arm-cross-compile-sources.list | sudo tee /etc/apt/sources.list.d/arm-cross-compile-sources.list
sudo cp /etc/apt/sources.list "/etc/apt/sources.list.`date`.backup" sudo cp /etc/apt/sources.list "/etc/apt/sources.list.`date`.backup"
sudo sed -i -E "s/(deb)\ (http:.+)/\1\ [arch=amd64]\ \2/" /etc/apt/sources.list sudo sed -i -E "s/(deb)\ (http:.+)/\1\ [arch=amd64]\ \2/" /etc/apt/sources.list
sudo apt update sudo apt update
sudo apt install -y gcc-9-aarch64-linux-gnu \ sudo apt install -y gcc-11-aarch64-linux-gnu \
g++-9-aarch64-linux-gnu g++-11-aarch64-linux-gnu
sudo apt-get install -y \ sudo apt-get install -y \
libatlas-base-dev:arm64 \ libatlas-base-dev:arm64 \
@@ -46,11 +46,15 @@ sudo apt-get install -y \
zlib1g-dev:arm64 zlib1g-dev:arm64
``` ```
The above enables apt to download packages for arm64. It also installs
gcc cross-compilers for aarch64 in version 11. This version needs to match the
versions of gcc defined in the cmake cross-compilation file (`cross-arm.cmake`).
## Install and Build ## Install and Build
### Install required packages ### Install required packages
Use the host compiler to install some dependencies. Use the host compiler to install its dependencies.
```shell ```shell
cd cmake_targets cd cmake_targets
@@ -85,9 +89,9 @@ be defined in order to tell cmake where the host tools have been built.
```shell ```shell
cd ../build-cross cd ../build-cross
cmake ../../.. -DCMAKE_TOOLCHAIN_FILE=../../../cmake_targets/cross-arm.cmake -DNATIVE_DIR=../build cmake ../../.. -GNinja -DCMAKE_TOOLCHAIN_FILE=../../../cmake_targets/cross-arm.cmake -DNATIVE_DIR=../build
make -j`nproc` dlsim ulsim ldpctest polartest smallblocktest nr_pbchsim nr_dlschsim nr_ulschsim nr_dlsim nr_ulsim nr_pucchsim nr_prachsim ninja -j`nproc` dlsim ulsim ldpctest polartest smallblocktest nr_pbchsim nr_dlschsim nr_ulschsim nr_dlsim nr_ulsim nr_pucchsim nr_prachsim
make -j`nproc` lte-softmodem nr-softmodem nr-cuup oairu lte-uesoftmodem nr-uesoftmodem ninja -j`nproc` lte-softmodem nr-softmodem nr-cuup oairu lte-uesoftmodem nr-uesoftmodem
make -j`nproc` params_libconfig coding rfsimulator ninja -j`nproc` params_libconfig coding rfsimulator
``` ```
@@ -21,12 +21,12 @@
#--------------------------------------------------------------------- #---------------------------------------------------------------------
# #
# Dockerfile for the Open-Air-Interface BUILD service # Dockerfile for the Open-Air-Interface BUILD service
# Valid for Ubuntu 20.04 # Valid for Ubuntu 22.04
# #
#--------------------------------------------------------------------- #---------------------------------------------------------------------
FROM ubuntu:focal AS ran-base FROM ubuntu:jammy AS ran-base
ARG NEEDED_GIT_PROXY ARG NEEDED_GIT_PROXY
ENV DEBIAN_FRONTEND=noninteractive ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=Europe/Paris ENV TZ=Europe/Paris
@@ -34,6 +34,7 @@ ENV BUILD_UHD_FROM_SOURCE=True
ENV UHD_VERSION=4.4.0.0 ENV UHD_VERSION=4.4.0.0
#install developers pkg/repo #install developers pkg/repo
#use gcc-12 to avoid problems of default gcc-11 in FlexRIC
RUN apt-get update && \ RUN apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get upgrade --yes && \ DEBIAN_FRONTEND=noninteractive apt-get upgrade --yes && \
DEBIAN_FRONTEND=noninteractive apt-get install --yes \ DEBIAN_FRONTEND=noninteractive apt-get install --yes \
@@ -41,9 +42,12 @@ RUN apt-get update && \
build-essential \ build-essential \
psmisc \ psmisc \
git \ git \
gcc-12 \
g++-12 \
xxd \ xxd \
# python3-pip for conf template generation # python3-pip for conf template generation
python3-pip && \ python3-pip && \
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 100 --slave /usr/bin/g++ g++ /usr/bin/g++-12 && \
pip3 install --ignore-installed pyyaml pip3 install --ignore-installed pyyaml
# Add "Tini - A tiny but valid init for containers", https://github.com/krallin/tini # Add "Tini - A tiny but valid init for containers", https://github.com/krallin/tini
@@ -21,12 +21,12 @@
#--------------------------------------------------------------------- #---------------------------------------------------------------------
# #
# Dockerfile for the Open-Air-Interface BUILD service # Dockerfile for the Open-Air-Interface BUILD service
# Valid for Ubuntu 20.04 to cross-compile for ARM64 # Valid for Ubuntu 22.04 to cross-compile for ARM64
# #
#--------------------------------------------------------------------- #---------------------------------------------------------------------
# Very important, the focal image shall not be using mirrors. A lot of them do NOT support ARM64. # Very important, the jammy image shall not be using mirrors. A lot of them do NOT support ARM64.
FROM ubuntu:focal AS ran-base FROM ubuntu:jammy AS ran-base
ENV DEBIAN_FRONTEND=noninteractive ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=Europe/Paris ENV TZ=Europe/Paris
# Specifying a working version of SIMDE for ARM: # Specifying a working version of SIMDE for ARM:
@@ -37,13 +37,13 @@ RUN apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get upgrade --yes && \ DEBIAN_FRONTEND=noninteractive apt-get upgrade --yes && \
#enabling arm64 architecture #enabling arm64 architecture
dpkg --add-architecture arm64 && \ dpkg --add-architecture arm64 && \
echo "deb [arch=arm64] http://ports.ubuntu.com/ focal main restricted\n" \ echo "deb [arch=arm64] http://ports.ubuntu.com/ jammy main restricted\n" \
"deb [arch=arm64] http://ports.ubuntu.com/ focal-updates main restricted\n" \ "deb [arch=arm64] http://ports.ubuntu.com/ jammy-updates main restricted\n" \
"deb [arch=arm64] http://ports.ubuntu.com/ focal universe\n" \ "deb [arch=arm64] http://ports.ubuntu.com/ jammy universe\n" \
"deb [arch=arm64] http://ports.ubuntu.com/ focal-updates universe\n" \ "deb [arch=arm64] http://ports.ubuntu.com/ jammy-updates universe\n" \
"deb [arch=arm64] http://ports.ubuntu.com/ focal multiverse\n" \ "deb [arch=arm64] http://ports.ubuntu.com/ jammy multiverse\n" \
"deb [arch=arm64] http://ports.ubuntu.com/ focal-updates multiverse\n" \ "deb [arch=arm64] http://ports.ubuntu.com/ jammy-updates multiverse\n" \
"deb [arch=arm64] http://ports.ubuntu.com/ focal-backports main restricted universe multiverse" \ "deb [arch=arm64] http://ports.ubuntu.com/ jammy-backports main restricted universe multiverse" \
| tee /etc/apt/sources.list.d/arm-cross-compile-sources.list && \ | tee /etc/apt/sources.list.d/arm-cross-compile-sources.list && \
cp /etc/apt/sources.list "/etc/apt/sources.list.`date`.backup" && \ cp /etc/apt/sources.list "/etc/apt/sources.list.`date`.backup" && \
sed -i -E "s/(deb)\ (http:.+)/\1\ [arch=amd64]\ \2/" /etc/apt/sources.list && \ sed -i -E "s/(deb)\ (http:.+)/\1\ [arch=amd64]\ \2/" /etc/apt/sources.list && \
@@ -69,8 +69,8 @@ RUN apt-get update && \
zlib1g-dev:arm64 \ zlib1g-dev:arm64 \
# cross build libs and compilers # cross build libs and compilers
libc6-dev-i386 \ libc6-dev-i386 \
gcc-9-aarch64-linux-gnu \ gcc-11-aarch64-linux-gnu \
g++-9-aarch64-linux-gnu && \ g++-11-aarch64-linux-gnu && \
apt-get clean apt-get clean
# Add "Tini - A tiny but valid init for containers", https://github.com/krallin/tini # Add "Tini - A tiny but valid init for containers", https://github.com/krallin/tini
@@ -21,7 +21,7 @@
#--------------------------------------------------------------------- #---------------------------------------------------------------------
# #
# Dockerfile for the Open-Air-Interface BUILD service # Dockerfile for the Open-Air-Interface BUILD service
# Valid for Ubuntu 20.04 # Valid for Ubuntu 22.04
# #
#--------------------------------------------------------------------- #---------------------------------------------------------------------
@@ -42,6 +42,6 @@ RUN /bin/sh oaienv && \
-w USRP -t Ethernet \ -w USRP -t Ethernet \
--build-e2 --cmake-opt -DXAPP_MULTILANGUAGE=OFF \ --build-e2 --cmake-opt -DXAPP_MULTILANGUAGE=OFF \
--noavx512 \ --noavx512 \
--cmake-opt -DCMAKE_C_FLAGS="-Werror -fstack-protector-strong" --cmake-opt -DCMAKE_CXX_FLAGS="-Werror -fstack-protector-strong" $BUILD_OPTION && \ --cmake-opt -DCMAKE_C_FLAGS="-Werror" --cmake-opt -DCMAKE_CXX_FLAGS="-Werror" $BUILD_OPTION && \
# Mainly to see if the sanitize option was perfectly executed # Mainly to see if the sanitize option was perfectly executed
ldd ran_build/build/nr-softmodem ldd ran_build/build/nr-softmodem
@@ -21,7 +21,7 @@
#--------------------------------------------------------------------- #---------------------------------------------------------------------
# #
# Dockerfile for the Open-Air-Interface BUILD service # Dockerfile for the Open-Air-Interface BUILD service
# Valid for Ubuntu 20.04 to cross-compile for ARM64 # Valid for Ubuntu 22.04 to cross-compile for ARM64
# #
#--------------------------------------------------------------------- #---------------------------------------------------------------------
@@ -47,6 +47,6 @@ RUN /bin/sh oaienv && \
ninja dlsim ulsim ldpctest polartest smallblocktest nr_pbchsim nr_dlschsim nr_ulschsim nr_dlsim nr_ulsim nr_pucchsim nr_prachsim lte-softmodem nr-softmodem nr-cuup oairu lte-uesoftmodem nr-uesoftmodem params_libconfig coding rfsimulator > ../../log/all.txt 2>&1; \ ninja dlsim ulsim ldpctest polartest smallblocktest nr_pbchsim nr_dlschsim nr_ulschsim nr_dlsim nr_ulsim nr_pucchsim nr_prachsim lte-softmodem nr-softmodem nr-cuup oairu lte-uesoftmodem nr-uesoftmodem params_libconfig coding rfsimulator > ../../log/all.txt 2>&1; \
# displaying errors and warnings # displaying errors and warnings
egrep -A3 "warning:|error:" ../../log/all.txt || true && \ egrep -A3 "warning:|error:" ../../log/all.txt || true && \
# will fail only for errors # will fail only if string "errors:" is found
egrep -L "error:" ../../log/all.txt && \ egrep "error:" -vqz ../../log/all.txt && \
echo "====== End of log for cross-build executables ======" echo "====== End of log for cross-build executables ======"
@@ -21,7 +21,7 @@
#--------------------------------------------------------------------- #---------------------------------------------------------------------
# #
# Dockerfile for the Open-Air-Interface BUILD service # Dockerfile for the Open-Air-Interface BUILD service
# Valid for Ubuntu 20.04 # Valid for Ubuntu 22.04
# #
#--------------------------------------------------------------------- #---------------------------------------------------------------------
@@ -31,7 +31,7 @@ FROM ran-build:latest AS enb-build
#start from scratch for target executable #start from scratch for target executable
FROM ubuntu:focal as oai-enb FROM ubuntu:jammy as oai-enb
ARG BUILD_OPTION ARG BUILD_OPTION
ENV DEBIAN_FRONTEND=noninteractive ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=Europe/Paris ENV TZ=Europe/Paris
@@ -42,38 +42,50 @@ RUN apt-get update && \
software-properties-common \ software-properties-common \
procps \ procps \
libsctp1 \ libsctp1 \
libboost-chrono1.71.0 \ libboost-chrono1.74.0 \
libboost-date-time1.71.0 \ libboost-date-time1.74.0 \
libboost-filesystem1.71.0 \ libboost-filesystem1.74.0 \
libboost-regex1.71.0 \ libboost-regex1.74.0 \
libboost-serialization1.71.0 \ libboost-serialization1.74.0 \
libboost-thread1.71.0 \ libboost-thread1.74.0 \
libboost-system1.71.0 \ libboost-system1.74.0 \
libboost-program-options1.71.0 \ libboost-program-options1.74.0 \
tzdata \ tzdata \
libblas3 \ libblas3 \
libatlas3-base \ libatlas3-base \
libconfig9 \ libconfig9 \
openssl \ openssl \
net-tools \ net-tools \
iperf \ wget \
iperf3 \ iperf3 \
iputils-ping \ iputils-ping \
iproute2 \ iproute2 \
gdb \ gdb \
python \
python3 \ python3 \
python3-six \ python3-six \
python3-requests \ python3-requests \
libusb-1.0-0 && \ libusb-1.0-0 && \
# Installing older version of iperf2 for feMBMS test
wget --quiet http://fr.archive.ubuntu.com/ubuntu/pool/universe/i/iperf/iperf_2.0.13+dfsg1-1build1_amd64.deb && \
dpkg -i iperf_2.0.13+dfsg1-1build1_amd64.deb && \
# iperf --version returns 1 that fails docker build
iperf --version || true && \
rm -f iperf_2.0.13+dfsg1-1build1_amd64.deb && \
apt-get remove -y wget && \
# if the --sanitize option was used to build, additional packages are required # if the --sanitize option was used to build, additional packages are required
/bin/bash -c 'if [[ "$BUILD_OPTION" = "--sanitize" ]]; then DEBIAN_FRONTEND=noninteractive apt-get install --yes \ /bin/bash -c 'if [[ "$BUILD_OPTION" = "--sanitize" ]]; then DEBIAN_FRONTEND=noninteractive apt-get install --yes \
libasan5 \ #libasan5 \ # see below
libubsan1 \ libubsan1 \
liblapacke; fi' && \ liblapacke; fi' && \
apt-get clean -y && \ apt-get clean -y && \
rm -rf /var/lib/apt/lists/* rm -rf /var/lib/apt/lists/*
# we select another compile (gcc-12) for compilation, requiring another libasan
# library version. Installing it above would install the wrong version. Hence,
# copy the right version from ran-build. When upgrading to Ubuntu24, install
# the correct one above!
COPY --from=enb-build /usr/lib/x86_64-linux-gnu/libasan.so.8.0.0 /usr/lib/x86_64-linux-gnu/
WORKDIR /opt/oai-enb/bin WORKDIR /opt/oai-enb/bin
COPY --from=enb-build \ COPY --from=enb-build \
/oai-ran/cmake_targets/ran_build/build/lte-softmodem ./ /oai-ran/cmake_targets/ran_build/build/lte-softmodem ./
@@ -58,7 +58,7 @@ RUN /bin/sh oaienv && \
#start from scratch for target executable #start from scratch for target executable
FROM ubuntu:focal as oai-gnb-aerial FROM ubuntu:jammy as oai-gnb-aerial
ENV DEBIAN_FRONTEND=noninteractive ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=Europe ENV TZ=Europe
@@ -58,7 +58,7 @@ RUN /bin/sh oaienv && \
#start from scratch for target executable #start from scratch for target executable
FROM ubuntu:focal as oai-gnb-aerial FROM ubuntu:jammy as oai-gnb-aerial
ENV DEBIAN_FRONTEND=noninteractive ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=Europe ENV TZ=Europe
@@ -21,7 +21,7 @@
#--------------------------------------------------------------------- #---------------------------------------------------------------------
# #
# Dockerfile for the Open-Air-Interface BUILD service # Dockerfile for the Open-Air-Interface BUILD service
# Valid for Ubuntu18.04 # Valid for Ubuntu 22.04
# #
#--------------------------------------------------------------------- #---------------------------------------------------------------------
@@ -31,7 +31,7 @@ FROM ran-build:latest AS gnb-build
#start from scratch for target executable #start from scratch for target executable
FROM ubuntu:focal as oai-gnb FROM ubuntu:jammy as oai-gnb
ARG BUILD_OPTION ARG BUILD_OPTION
ENV DEBIAN_FRONTEND=noninteractive ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=Europe/Paris ENV TZ=Europe/Paris
@@ -42,14 +42,14 @@ RUN apt-get update && \
software-properties-common \ software-properties-common \
procps \ procps \
libsctp1 \ libsctp1 \
libboost-chrono1.71.0 \ libboost-chrono1.74.0 \
libboost-date-time1.71.0 \ libboost-date-time1.74.0 \
libboost-filesystem1.71.0 \ libboost-filesystem1.74.0 \
libboost-regex1.71.0 \ libboost-regex1.74.0 \
libboost-serialization1.71.0 \ libboost-serialization1.74.0 \
libboost-thread1.71.0 \ libboost-thread1.74.0 \
libboost-system1.71.0 \ libboost-system1.74.0 \
libboost-program-options1.71.0 \ libboost-program-options1.74.0 \
tzdata \ tzdata \
libblas3 \ libblas3 \
libatlas3-base \ libatlas3-base \
@@ -61,19 +61,24 @@ RUN apt-get update && \
iproute2 \ iproute2 \
iputils-ping \ iputils-ping \
gdb \ gdb \
python \
python3 \ python3 \
python3-six \ python3-six \
python3-requests \ python3-requests \
libusb-1.0-0 && \ libusb-1.0-0 && \
# if the --sanitize option was used to build, additional packages are required # if the --sanitize option was used to build, additional packages are required
/bin/bash -c 'if [[ "$BUILD_OPTION" = "--sanitize" ]]; then DEBIAN_FRONTEND=noninteractive apt-get install --yes \ /bin/bash -c 'if [[ "$BUILD_OPTION" = "--sanitize" ]]; then DEBIAN_FRONTEND=noninteractive apt-get install --yes \
libasan5 \ #libasan5 \ # see below
libubsan1 \ libubsan1 \
liblapacke; fi' && \ liblapacke; fi' && \
apt-get clean -y && \ apt-get clean -y && \
rm -rf /var/lib/apt/lists/* rm -rf /var/lib/apt/lists/*
# we select another compile (gcc-12) for compilation, requiring another libasan
# library version. Installing it above would install the wrong version. Hence,
# copy the right version from ran-build. When upgrading to Ubuntu24, install
# the correct one above!
COPY --from=gnb-build /usr/lib/x86_64-linux-gnu/libasan.so.8.0.0 /usr/lib/x86_64-linux-gnu/
WORKDIR /opt/oai-gnb/bin WORKDIR /opt/oai-gnb/bin
COPY --from=gnb-build \ COPY --from=gnb-build \
/oai-ran/cmake_targets/ran_build/build/nr-softmodem ./ /oai-ran/cmake_targets/ran_build/build/nr-softmodem ./
@@ -21,7 +21,7 @@
#--------------------------------------------------------------------- #---------------------------------------------------------------------
# #
# Dockerfile for the Open-Air-Interface BUILD service # Dockerfile for the Open-Air-Interface BUILD service
# Valid for Ubuntu 20.04 # Valid for Ubuntu 22.04
# #
#--------------------------------------------------------------------- #---------------------------------------------------------------------
@@ -31,7 +31,7 @@ FROM ran-build:latest AS ru-build
#start from scratch for target executable #start from scratch for target executable
FROM ubuntu:focal as oai-lte-ru FROM ubuntu:jammy as oai-lte-ru
ENV DEBIAN_FRONTEND=noninteractive ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=Europe/Paris ENV TZ=Europe/Paris
@@ -46,7 +46,6 @@ RUN apt-get update && \
libconfig9 \ libconfig9 \
net-tools \ net-tools \
gdb \ gdb \
python \
python3 \ python3 \
python3-six \ python3-six \
python3-requests \ python3-requests \
@@ -74,13 +73,13 @@ COPY --from=ru-base /usr/local/lib/libuhd.so.4.4.0 /usr/local/lib
COPY --from=ru-base /usr/local/lib/uhd/utils/uhd_images_downloader.py /opt/oai-lte-ru/bin COPY --from=ru-base /usr/local/lib/uhd/utils/uhd_images_downloader.py /opt/oai-lte-ru/bin
COPY --from=ru-base \ COPY --from=ru-base \
/usr/lib/x86_64-linux-gnu/libboost_chrono.so.1.71.0 \ /usr/lib/x86_64-linux-gnu/libboost_chrono.so.1.74.0 \
/usr/lib/x86_64-linux-gnu/libboost_date_time.so.1.71.0 \ /usr/lib/x86_64-linux-gnu/libboost_date_time.so.1.74.0 \
/usr/lib/x86_64-linux-gnu/libboost_filesystem.so.1.71.0 \ /usr/lib/x86_64-linux-gnu/libboost_filesystem.so.1.74.0 \
/usr/lib/x86_64-linux-gnu/libboost_regex.so.1.71.0 \ /usr/lib/x86_64-linux-gnu/libboost_regex.so.1.74.0 \
/usr/lib/x86_64-linux-gnu/libboost_serialization.so.1.71.0 \ /usr/lib/x86_64-linux-gnu/libboost_serialization.so.1.74.0 \
/usr/lib/x86_64-linux-gnu/libboost_thread.so.1.71.0 \ /usr/lib/x86_64-linux-gnu/libboost_thread.so.1.74.0 \
/usr/lib/x86_64-linux-gnu/libboost_system.so.1.71.0 \ /usr/lib/x86_64-linux-gnu/libboost_system.so.1.74.0 \
/usr/lib/x86_64-linux-gnu/ /usr/lib/x86_64-linux-gnu/
RUN /bin/bash -c "ln -s /usr/local/lib/liboai_usrpdevif.so /usr/local/lib/liboai_device.so" && \ RUN /bin/bash -c "ln -s /usr/local/lib/liboai_usrpdevif.so /usr/local/lib/liboai_device.so" && \
@@ -31,7 +31,7 @@ FROM ran-build:latest AS lte-ue-build
#start from scratch for target executable #start from scratch for target executable
FROM ubuntu:focal as oai-lte-ue FROM ubuntu:jammy as oai-lte-ue
ARG BUILD_OPTION ARG BUILD_OPTION
ENV DEBIAN_FRONTEND=noninteractive ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=Europe/Paris ENV TZ=Europe/Paris
@@ -42,38 +42,50 @@ RUN apt-get update && \
software-properties-common \ software-properties-common \
procps \ procps \
libsctp1 \ libsctp1 \
libboost-chrono1.71.0 \ libboost-chrono1.74.0 \
libboost-date-time1.71.0 \ libboost-date-time1.74.0 \
libboost-filesystem1.71.0 \ libboost-filesystem1.74.0 \
libboost-regex1.71.0 \ libboost-regex1.74.0 \
libboost-serialization1.71.0 \ libboost-serialization1.74.0 \
libboost-thread1.71.0 \ libboost-thread1.74.0 \
libboost-system1.71.0 \ libboost-system1.74.0 \
libboost-program-options1.71.0 \ libboost-program-options1.74.0 \
tzdata \ tzdata \
liblapacke \ liblapacke \
libatlas3-base \ libatlas3-base \
libconfig9 \ libconfig9 \
openssl \ openssl \
net-tools \ net-tools \
python \
python3 \ python3 \
python3-six \ python3-six \
python3-requests \ python3-requests \
libpython3.8 \ libpython3.10 \
libusb-1.0-0 \ libusb-1.0-0 \
iputils-ping \ iputils-ping \
iproute2 \ iproute2 \
iperf3 \ iperf3 \
iperf && \ wget && \
# Installing older version of iperf2 for feMBMS test
wget --quiet http://fr.archive.ubuntu.com/ubuntu/pool/universe/i/iperf/iperf_2.0.13+dfsg1-1build1_amd64.deb && \
dpkg -i iperf_2.0.13+dfsg1-1build1_amd64.deb && \
# iperf --version returns 1 that fails docker build
iperf --version || true && \
rm -f iperf_2.0.13+dfsg1-1build1_amd64.deb && \
apt-get remove -y wget && \
# if the --sanitize option was used to build, additional packages are required # if the --sanitize option was used to build, additional packages are required
/bin/bash -c 'if [[ "$BUILD_OPTION" = "--sanitize" ]]; then DEBIAN_FRONTEND=noninteractive apt-get install --yes \ /bin/bash -c 'if [[ "$BUILD_OPTION" = "--sanitize" ]]; then DEBIAN_FRONTEND=noninteractive apt-get install --yes \
libasan5 \ #libasan5 \ # see below
libubsan1 \ libubsan1 \
liblapacke; fi' && \ liblapacke; fi' && \
apt-get clean -y && \ apt-get clean -y && \
rm -rf /var/lib/apt/lists/* rm -rf /var/lib/apt/lists/*
# we select another compile (gcc-12) for compilation, requiring another libasan
# library version. Installing it above would install the wrong version. Hence,
# copy the right version from ran-build. When upgrading to Ubuntu24, install
# the correct one above!
COPY --from=lte-ue-build /usr/lib/x86_64-linux-gnu/libasan.so.8.0.0 /usr/lib/x86_64-linux-gnu/
WORKDIR /opt/oai-lte-ue/bin WORKDIR /opt/oai-lte-ue/bin
COPY --from=lte-ue-build \ COPY --from=lte-ue-build \
/oai-ran/cmake_targets/ran_build/build/lte-uesoftmodem \ /oai-ran/cmake_targets/ran_build/build/lte-uesoftmodem \
@@ -30,7 +30,7 @@ FROM ran-base:latest as gnb-base
FROM ran-build:latest AS gnb-build FROM ran-build:latest AS gnb-build
FROM ubuntu:focal as oai-nr-cuup FROM ubuntu:jammy as oai-nr-cuup
ARG BUILD_OPTION ARG BUILD_OPTION
ENV DEBIAN_FRONTEND=noninteractive ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=Europe ENV TZ=Europe
@@ -45,11 +45,17 @@ RUN apt-get update && \
openssl && \ openssl && \
# if the --sanitize option was used to build, additional packages are required # if the --sanitize option was used to build, additional packages are required
/bin/bash -c 'if [[ "$BUILD_OPTION" = "--sanitize" ]]; then DEBIAN_FRONTEND=noninteractive apt-get install --yes \ /bin/bash -c 'if [[ "$BUILD_OPTION" = "--sanitize" ]]; then DEBIAN_FRONTEND=noninteractive apt-get install --yes \
libasan5 \ #libasan5 \ see below
libubsan1 \ libubsan1 \
liblapacke; fi' && \ liblapacke; fi' && \
rm -rf /var/lib/apt/lists/* rm -rf /var/lib/apt/lists/*
# we select another compile (gcc-12) for compilation, requiring another libasan
# library version. Installing it above would install the wrong version. Hence,
# copy the right version from ran-build. When upgrading to Ubuntu24, install
# the correct one above!
COPY --from=gnb-build /usr/lib/x86_64-linux-gnu/libasan.so.8.0.0 /usr/lib/x86_64-linux-gnu/
WORKDIR /opt/oai-gnb/bin WORKDIR /opt/oai-gnb/bin
COPY --from=gnb-build \ COPY --from=gnb-build \
/oai-ran/cmake_targets/ran_build/build/nr-cuup \ /oai-ran/cmake_targets/ran_build/build/nr-cuup \
@@ -21,7 +21,7 @@
#--------------------------------------------------------------------- #---------------------------------------------------------------------
# #
# Dockerfile for the Open-Air-Interface BUILD service # Dockerfile for the Open-Air-Interface BUILD service
# Valid for Ubuntu 20.04 # Valid for Ubuntu 22.04
# #
#--------------------------------------------------------------------- #---------------------------------------------------------------------
@@ -31,7 +31,7 @@ FROM ran-build:latest AS nr-ue-build
#start from scratch for target executable #start from scratch for target executable
FROM ubuntu:focal as oai-nr-ue FROM ubuntu:jammy as oai-nr-ue
ARG BUILD_OPTION ARG BUILD_OPTION
ENV DEBIAN_FRONTEND=noninteractive ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=Europe/Paris ENV TZ=Europe/Paris
@@ -42,14 +42,14 @@ RUN apt-get update && \
software-properties-common \ software-properties-common \
procps \ procps \
libsctp1 \ libsctp1 \
libboost-chrono1.71.0 \ libboost-chrono1.74.0 \
libboost-date-time1.71.0 \ libboost-date-time1.74.0 \
libboost-filesystem1.71.0 \ libboost-filesystem1.74.0 \
libboost-regex1.71.0 \ libboost-regex1.74.0 \
libboost-serialization1.71.0 \ libboost-serialization1.74.0 \
libboost-thread1.71.0 \ libboost-thread1.74.0 \
libboost-system1.71.0 \ libboost-system1.74.0 \
libboost-program-options1.71.0 \ libboost-program-options1.74.0 \
tzdata \ tzdata \
liblapacke \ liblapacke \
libatlas3-base \ libatlas3-base \
@@ -57,7 +57,6 @@ RUN apt-get update && \
openssl \ openssl \
net-tools \ net-tools \
gdb \ gdb \
python \
python3 \ python3 \
python3-six \ python3-six \
python3-requests \ python3-requests \
@@ -68,11 +67,17 @@ RUN apt-get update && \
iperf && \ iperf && \
# if the --sanitize option was used to build, additional packages are required # if the --sanitize option was used to build, additional packages are required
/bin/bash -c 'if [[ "$BUILD_OPTION" = "--sanitize" ]]; then DEBIAN_FRONTEND=noninteractive apt-get install --yes \ /bin/bash -c 'if [[ "$BUILD_OPTION" = "--sanitize" ]]; then DEBIAN_FRONTEND=noninteractive apt-get install --yes \
libasan5 \ #libasan5 \ # see below
libubsan1; fi' && \ libubsan1; fi' && \
apt-get clean -y && \ apt-get clean -y && \
rm -rf /var/lib/apt/lists/* rm -rf /var/lib/apt/lists/*
# we select another compile (gcc-12) for compilation, requiring another libasan
# library version. Installing it above would install the wrong version. Hence,
# copy the right version from ran-build. When upgrading to Ubuntu24, install
# the correct one above!
COPY --from=nr-ue-build /usr/lib/x86_64-linux-gnu/libasan.so.8.0.0 /usr/lib/x86_64-linux-gnu/
WORKDIR /opt/oai-nr-ue/bin WORKDIR /opt/oai-nr-ue/bin
COPY --from=nr-ue-build \ COPY --from=nr-ue-build \
/oai-ran/cmake_targets/ran_build/build/nr-uesoftmodem \ /oai-ran/cmake_targets/ran_build/build/nr-uesoftmodem \
+9 -9
View File
@@ -75,18 +75,18 @@ Targets can be:
The currently-supported OS are: The currently-supported OS are:
- `rhel9` for Red Hat Entreprise Linux (including images for an OpenShift cluster) - `rhel9` for Red Hat Entreprise Linux (including images for an OpenShift cluster)
- `ubuntu20` for Ubuntu 20.04 LTS - `ubuntu22` for Ubuntu 22.04 LTS
- `rocky` for Rocky-Linux 8.7 - `rocky` for Rocky-Linux 8.7
For more details regarding the build on an Openshift Cluster, see [OpenShift README](../openshift/README.md). For more details regarding the build on an Openshift Cluster, see [OpenShift README](../openshift/README.md).
# 3. Building using `docker` under Ubuntu 20.04 # # 3. Building using `docker` under Ubuntu 22.04 #
## 3.1. Pre-requisites ## ## 3.1. Pre-requisites ##
* `git` installed * `git` installed
* `docker-ce` installed * `docker-ce` installed
* Pulling `ubuntu:focal` from DockerHub * Pulling `ubuntu:jammy` from DockerHub
## 3.2. Building the shared images ## ## 3.2. Building the shared images ##
@@ -96,8 +96,8 @@ There are two shared images: one that has all dependencies, and a second that co
git clone https://gitlab.eurecom.fr/oai/openairinterface5g.git git clone https://gitlab.eurecom.fr/oai/openairinterface5g.git
cd openairinterface5g cd openairinterface5g
git checkout develop git checkout develop
docker build --target ran-base --tag ran-base:latest --file docker/Dockerfile.base.ubuntu20 . docker build --target ran-base --tag ran-base:latest --file docker/Dockerfile.base.ubuntu22 .
docker build --target ran-build --tag ran-build:latest --file docker/Dockerfile.build.ubuntu20 . docker build --target ran-build --tag ran-build:latest --file docker/Dockerfile.build.ubuntu22 .
``` ```
After building both: After building both:
@@ -115,12 +115,12 @@ Note that the steps are identical for `rocky-linux`.
### 3.2.1. Additional build otions ### 3.2.1. Additional build otions
This is only available for the Ubuntu-20 version. This is only available for the Ubuntu version of Dockerfiles.
You can, for example, create a `sanitizer` version of the ran-build image. You can, for example, create a `sanitizer` version of the ran-build image.
```bash ```bash
docker build --target ran-build --tag ran-build:latest --file docker/Dockerfile.build.ubuntu20 --build-arg "BUILD_OPTION=--sanitize" . docker build --target ran-build --tag ran-build:latest --file docker/Dockerfile.build.ubuntu22 --build-arg "BUILD_OPTION=--sanitize" .
``` ```
Currently the `--sanitize` option for `build_oai` enables: Currently the `--sanitize` option for `build_oai` enables:
@@ -146,7 +146,7 @@ You can also use this docker build arguments to pass any available option(s) on
For example, the eNB: For example, the eNB:
```bash ```bash
docker build --target oai-enb --tag oai-enb:latest --file docker/Dockerfile.eNB.ubuntu20 . docker build --target oai-enb --tag oai-enb:latest --file docker/Dockerfile.eNB.ubuntu22 .
``` ```
After a while: After a while:
@@ -171,7 +171,7 @@ Note that the steps are identical for `rocky-linux`.
If you have used the sanitizer option, then you should also pass it when building the target image: If you have used the sanitizer option, then you should also pass it when building the target image:
```bash ```bash
docker build --target oai-gnb --tag oai-gnb:latest --file docker/Dockerfile.gNB.ubuntu20 --build-arg "BUILD_OPTION=--sanitize" . docker build --target oai-gnb --tag oai-gnb:latest --file docker/Dockerfile.gNB.ubuntu22 --build-arg "BUILD_OPTION=--sanitize" .
``` ```
Normally the target image will be around 200 Mbytes bigger. Normally the target image will be around 200 Mbytes bigger.
-1
View File
@@ -79,7 +79,6 @@
#include "common/utils/LOG/log.h" #include "common/utils/LOG/log.h"
#include "UTIL/OTG/otg_tx.h" #include "UTIL/OTG/otg_tx.h"
#include "UTIL/OTG/otg_externs.h" #include "UTIL/OTG/otg_externs.h"
#include "UTIL/MATH/oml.h"
#include "common/utils/LOG/vcd_signal_dumper.h" #include "common/utils/LOG/vcd_signal_dumper.h"
#include "UTIL/OPT/opt.h" #include "UTIL/OPT/opt.h"
#include "enb_config.h" #include "enb_config.h"
+1 -1
View File
@@ -69,7 +69,7 @@ unsigned short config_frames[4] = {2,9,11,13};
#include "common/utils/LOG/log.h" #include "common/utils/LOG/log.h"
#include "UTIL/OTG/otg_tx.h" #include "UTIL/OTG/otg_tx.h"
#include "UTIL/OTG/otg_externs.h" #include "UTIL/OTG/otg_externs.h"
#include "UTIL/MATH/oml.h" #include "SIMULATION/TOOLS/sim.h"
#include "common/utils/LOG/vcd_signal_dumper.h" #include "common/utils/LOG/vcd_signal_dumper.h"
#include "UTIL/OPT/opt.h" #include "UTIL/OPT/opt.h"
#include "enb_config.h" #include "enb_config.h"
-1
View File
@@ -56,7 +56,6 @@
#include "nfapi/oai_integration/vendor_ext.h" #include "nfapi/oai_integration/vendor_ext.h"
#include "UTIL/OTG/otg_tx.h" #include "UTIL/OTG/otg_tx.h"
#include "UTIL/OTG/otg_externs.h" #include "UTIL/OTG/otg_externs.h"
#include "UTIL/MATH/oml.h"
#include "common/utils/LOG/vcd_signal_dumper.h" #include "common/utils/LOG/vcd_signal_dumper.h"
#include "UTIL/OPT/opt.h" #include "UTIL/OPT/opt.h"
#include "lte-softmodem.h" #include "lte-softmodem.h"
+1 -1
View File
@@ -66,7 +66,7 @@
#include "nfapi/oai_integration/vendor_ext.h" #include "nfapi/oai_integration/vendor_ext.h"
#include "UTIL/OTG/otg_tx.h" #include "UTIL/OTG/otg_tx.h"
#include "UTIL/OTG/otg_externs.h" #include "UTIL/OTG/otg_externs.h"
#include "UTIL/MATH/oml.h" #include "SIMULATION/TOOLS/sim.h"
#include "common/utils/LOG/vcd_signal_dumper.h" #include "common/utils/LOG/vcd_signal_dumper.h"
#include "UTIL/OPT/opt.h" #include "UTIL/OPT/opt.h"
-1
View File
@@ -71,7 +71,6 @@
#include "common/utils/LOG/log.h" #include "common/utils/LOG/log.h"
#include "UTIL/OTG/otg_tx.h" #include "UTIL/OTG/otg_tx.h"
#include "UTIL/OTG/otg_externs.h" #include "UTIL/OTG/otg_externs.h"
#include "UTIL/MATH/oml.h"
#include "common/utils/LOG/vcd_signal_dumper.h" #include "common/utils/LOG/vcd_signal_dumper.h"
#include "UTIL/OPT/opt.h" #include "UTIL/OPT/opt.h"
#include "gnb_paramdef.h" #include "gnb_paramdef.h"
+30 -27
View File
@@ -1074,7 +1074,11 @@ static int32_t aerial_pack_tx_data_request(void *pMessageBuf,
for (; k < total_number_of_tlvs; ++k) { for (; k < total_number_of_tlvs; ++k) {
if (value->TLVs[k].length > 0) { if (value->TLVs[k].length > 0) {
if (value->TLVs[k].length % 4 != 0) { if (value->TLVs[k].length % 4 != 0) {
if (!pusharray32(value->TLVs[k].value.direct, 16384, ((value->TLVs[k].length + 3) / 4) - 1, ppWriteData, data_end)) { if (!pusharray32(value->TLVs[k].value.direct,
(dataBufLen + 3) / 4,
((value->TLVs[k].length + 3) / 4) - 1,
ppWriteData,
data_end)) {
return 0; return 0;
} }
int bytesToAdd = 4 - (4 - (value->TLVs[k].length % 4)) % 4; int bytesToAdd = 4 - (4 - (value->TLVs[k].length % 4)) % 4;
@@ -1088,7 +1092,11 @@ static int32_t aerial_pack_tx_data_request(void *pMessageBuf,
} }
} else { } else {
// no padding needed // no padding needed
if (!pusharray32(value->TLVs[k].value.direct, 16384, ((value->TLVs[k].length + 3) / 4), ppWriteData, data_end)) { if (!pusharray32(value->TLVs[k].value.direct,
(dataBufLen + 3) / 4,
((value->TLVs[k].length + 3) / 4),
ppWriteData,
data_end)) {
return 0; return 0;
} }
} }
@@ -1109,7 +1117,7 @@ static int32_t aerial_pack_tx_data_request(void *pMessageBuf,
uintptr_t msgEnd = (uintptr_t)pPacketBodyField; uintptr_t msgEnd = (uintptr_t)pPacketBodyField;
uint32_t packedMsgLen = msgEnd - msgHead; uint32_t packedMsgLen = msgEnd - msgHead;
uint16_t packedMsgLen16; uint16_t packedMsgLen16;
if (packedMsgLen > 0xFFFF || packedMsgLen > packedBufLen) { if (packedMsgLen > packedBufLen + dataBufLen) {
NFAPI_TRACE(NFAPI_TRACE_ERROR, "Packed message length error %d, buffer supplied %d\n", packedMsgLen, packedBufLen); NFAPI_TRACE(NFAPI_TRACE_ERROR, "Packed message length error %d, buffer supplied %d\n", packedMsgLen, packedBufLen);
return 0; return 0;
} else { } else {
@@ -1123,17 +1131,6 @@ static int32_t aerial_pack_tx_data_request(void *pMessageBuf,
if (!push32(packedMsgLen, &pPackedLengthField, pPackMessageEnd)) if (!push32(packedMsgLen, &pPackedLengthField, pPackMessageEnd))
return 0; return 0;
if (1) {
// quick test
if (pMessageHeader->message_length != packedMsgLen) {
NFAPI_TRACE(NFAPI_TRACE_ERROR,
"nfapi packedMsgLen(%d) != message_length(%d) id %d\n",
packedMsgLen,
pMessageHeader->message_length,
pMessageHeader->message_id);
}
}
return (packedMsgLen16); return (packedMsgLen16);
} }
@@ -1289,23 +1286,29 @@ int fapi_nr_pack_and_send_p7_message(vnf_p7_t *vnf_p7, nfapi_p7_message_header_t
{ {
uint8_t FAPI_buffer[1024 * 64]; uint8_t FAPI_buffer[1024 * 64];
// Check if TX_DATA request, if true, need to pack to data_buf // Check if TX_DATA request, if true, need to pack to data_buf
if (header->message_id if (header->message_id == NFAPI_NR_PHY_MSG_TYPE_TX_DATA_REQUEST) {
== NFAPI_NR_PHY_MSG_TYPE_TX_DATA_REQUEST) { nfapi_nr_tx_data_request_t *pNfapiMsg = (nfapi_nr_tx_data_request_t *)header;
uint8_t FAPI_data_buffer[1024 * 64]; uint64_t size = 0;
for (int i = 0; i < pNfapiMsg->Number_of_PDUs; ++i) {
size += pNfapiMsg->pdu_list[i].PDU_length;
}
AssertFatal(size <= 1024 * 1024 * 2, "Message data larger than available buffer, tried to pack %"PRId64 ,size);
uint8_t FAPI_data_buffer[1024 * 1024 * 2]; // 2MB
uint32_t data_len = 0; uint32_t data_len = 0;
int32_t len_FAPI = aerial_pack_tx_data_request(header, int32_t len_FAPI = aerial_pack_tx_data_request(header,
FAPI_buffer, FAPI_buffer,
FAPI_data_buffer, FAPI_data_buffer,
sizeof(FAPI_buffer), sizeof(FAPI_buffer),
sizeof(FAPI_data_buffer), sizeof(FAPI_data_buffer),
&vnf_p7->_public.codec_config, &vnf_p7->_public.codec_config,
&data_len); &data_len);
if (len_FAPI <=0) { if (len_FAPI <= 0) {
LOG_E(NFAPI_VNF,"Problem packing TX_DATA_request\n"); LOG_E(NFAPI_VNF, "Problem packing TX_DATA_request\n");
return len_FAPI; return len_FAPI;
} else {
int retval = aerial_send_P7_msg_with_data(FAPI_buffer, len_FAPI, FAPI_data_buffer, data_len, header);
return retval;
} }
else
return aerial_send_P7_msg_with_data(FAPI_buffer, len_FAPI, FAPI_data_buffer, data_len, header);
} else { } else {
// Create and send FAPI P7 message // Create and send FAPI P7 message
int len_FAPI = fapi_nr_p7_message_pack(header, FAPI_buffer, sizeof(FAPI_buffer), &vnf_p7->_public.codec_config); int len_FAPI = fapi_nr_p7_message_pack(header, FAPI_buffer, sizeof(FAPI_buffer), &vnf_p7->_public.codec_config);
@@ -26,10 +26,11 @@
// Extension to the generic structures for single tlv values // Extension to the generic structures for single tlv values
typedef struct { typedef struct {
/// Value: 0 -> 1, 0: Payload is carried directly in the value field, 1: Pointer to payload is in the value field /// Value: 0 -> 1, 0: Payload is carried directly in the value field, 1: Pointer to payload is in the value field
uint16_t tag; uint16_t tag;
/// Length of the actual payload in bytes, without the padding bytes Value: 0 → 65535 /// Length of the actual payload in bytes, without the padding bytes Value: 0 → 0xFFFFFFFF
uint16_t length; /// Note: This change to uint32_t is a deviation from version 10.02 of the SCF222 standard
uint32_t length;
union { union {
uint32_t *ptr; uint32_t *ptr;
uint32_t direct[38016]; uint32_t direct[38016];
+20 -14
View File
@@ -2017,8 +2017,7 @@ static uint8_t pack_hi_dci0_request(void *msg, uint8_t **ppWritePackedMsg, uint8
static uint8_t pack_tx_data_pdu_list_value(void *tlv, uint8_t **ppWritePackedMsg, uint8_t *end) static uint8_t pack_tx_data_pdu_list_value(void *tlv, uint8_t **ppWritePackedMsg, uint8_t *end)
{ {
nfapi_nr_pdu_t *value = (nfapi_nr_pdu_t *)tlv; nfapi_nr_pdu_t *value = (nfapi_nr_pdu_t *)tlv;
AssertFatal(value->PDU_length <= 0xFFFF,"TX_DATA.request PDU_Length should be within 16 bit, according to SCF222.10.02"); if (!(push32(value->PDU_length, ppWritePackedMsg, end) && push16(value->PDU_index, ppWritePackedMsg, end)
if (!(push16(value->PDU_length, ppWritePackedMsg, end) && push16(value->PDU_index, ppWritePackedMsg, end)
&& push32(value->num_TLV, ppWritePackedMsg, end))) && push32(value->num_TLV, ppWritePackedMsg, end)))
return 0; return 0;
@@ -2026,12 +2025,16 @@ static uint8_t pack_tx_data_pdu_list_value(void *tlv, uint8_t **ppWritePackedMsg
uint16_t total_number_of_tlvs = value->num_TLV; uint16_t total_number_of_tlvs = value->num_TLV;
for (; i < total_number_of_tlvs; ++i) { for (; i < total_number_of_tlvs; ++i) {
if (!(push16(value->TLVs[i].tag, ppWritePackedMsg, end) && push16(value->TLVs[i].length, ppWritePackedMsg, end))) if (!(push16(value->TLVs[i].tag, ppWritePackedMsg, end) && push32(value->TLVs[i].length, ppWritePackedMsg, end)))
return 0; return 0;
switch (value->TLVs[i].tag) { switch (value->TLVs[i].tag) {
case 0: { case 0: {
if (!pusharray32(value->TLVs[i].value.direct, 16384, (value->TLVs[i].length + 3) / 4, ppWritePackedMsg, end)) { if (!pusharray32(value->TLVs[i].value.direct,
(value->TLVs[i].length + 3) / 4,
(value->TLVs[i].length + 3) / 4,
ppWritePackedMsg,
end)) {
NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s():%d. value->TLVs[i].length %d \n", __FUNCTION__, __LINE__, value->TLVs[i].length); NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s():%d. value->TLVs[i].length %d \n", __FUNCTION__, __LINE__, value->TLVs[i].length);
return 0; return 0;
} }
@@ -2039,7 +2042,11 @@ static uint8_t pack_tx_data_pdu_list_value(void *tlv, uint8_t **ppWritePackedMsg
} }
case 1: { case 1: {
if (!pusharray32(value->TLVs[i].value.ptr, value->TLVs[i].length, value->TLVs[i].length, ppWritePackedMsg, end)) { if (!pusharray32(value->TLVs[i].value.ptr,
(value->TLVs[i].length + 3) / 4,
(value->TLVs[i].length + 3) / 4,
ppWritePackedMsg,
end)) {
NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s():%d. value->TLVs[i].length %d \n", __FUNCTION__, __LINE__, value->TLVs[i].length); NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s():%d. value->TLVs[i].length %d \n", __FUNCTION__, __LINE__, value->TLVs[i].length);
return 0; return 0;
} }
@@ -5903,18 +5910,15 @@ static uint8_t unpack_hi_dci0_request(uint8_t **ppReadPackedMsg, uint8_t *end, v
static uint8_t unpack_tx_data_pdu_list_value(uint8_t **ppReadPackedMsg, uint8_t *end, void *msg) { static uint8_t unpack_tx_data_pdu_list_value(uint8_t **ppReadPackedMsg, uint8_t *end, void *msg) {
nfapi_nr_pdu_t *pNfapiMsg = (nfapi_nr_pdu_t *)msg; nfapi_nr_pdu_t *pNfapiMsg = (nfapi_nr_pdu_t *)msg;
if(!(pull16(ppReadPackedMsg, (uint16_t *)&pNfapiMsg->PDU_length, end) && if (!(pull32(ppReadPackedMsg, &pNfapiMsg->PDU_length, end) && pull16(ppReadPackedMsg, &pNfapiMsg->PDU_index, end)
pull16(ppReadPackedMsg, &pNfapiMsg->PDU_index, end) && && pull32(ppReadPackedMsg, &pNfapiMsg->num_TLV, end)))
pull32(ppReadPackedMsg, &pNfapiMsg->num_TLV, end)
))
return 0; return 0;
uint16_t i = 0; uint16_t i = 0;
uint16_t total_number_of_tlvs = pNfapiMsg->num_TLV; uint16_t total_number_of_tlvs = pNfapiMsg->num_TLV;
for(; i < total_number_of_tlvs; ++i) { for(; i < total_number_of_tlvs; ++i) {
if (!(pull16(ppReadPackedMsg, &pNfapiMsg->TLVs[i].tag, end) && if (!(pull16(ppReadPackedMsg, &pNfapiMsg->TLVs[i].tag, end) && pull32(ppReadPackedMsg, &pNfapiMsg->TLVs[i].length, end)))
pull16(ppReadPackedMsg, &pNfapiMsg->TLVs[i].length, end)))
return 0; return 0;
switch(pNfapiMsg->TLVs[i].tag) { switch(pNfapiMsg->TLVs[i].tag) {
@@ -5928,9 +5932,11 @@ static uint8_t unpack_tx_data_pdu_list_value(uint8_t **ppReadPackedMsg, uint8_t
} }
case 1: { case 1: {
if (!pullarray32(ppReadPackedMsg,pNfapiMsg->TLVs[i].value.ptr, if (!pullarray32(ppReadPackedMsg,
pNfapiMsg->TLVs[i].length, pNfapiMsg->TLVs[i].value.ptr,
pNfapiMsg->TLVs[i].length, end)) (pNfapiMsg->TLVs[i].length + 3) / 4,
(pNfapiMsg->TLVs[i].length + 3) / 4,
end))
return 0; return 0;
break; break;
+3 -3
View File
@@ -430,11 +430,11 @@ int main(int argc, char *argv[])
} }
logInit(); logInit();
while ((c = getopt (argc, argv, "--:q:r:s:S:l:G:n:d:i:t:u:hv:")) != -1) { while ((c = getopt (argc, argv, "--:O:q:r:s:S:l:G:n:d:i:t:u:hv:")) != -1) {
/* ignore long options starting with '--' and their arguments that are handled by configmodule */ /* ignore long options starting with '--', option '-O' and their arguments that are handled by configmodule */
/* with this opstring getopt returns 1 for non-option arguments, refer to 'man 3 getopt' */ /* with this opstring getopt returns 1 for non-option arguments, refer to 'man 3 getopt' */
if (c == 1 || c == '-') if (c == 1 || c == '-' || c == 'O')
continue; continue;
printf("handling optarg %c\n",c); printf("handling optarg %c\n",c);
+3 -3
View File
@@ -38,11 +38,11 @@ int main(int argc, char *argv[])
} }
logInit(); logInit();
while ((arguments = getopt (argc, argv, "--:s:d:f:m:i:l:a:p:hqgFL:k:")) != -1) { while ((arguments = getopt (argc, argv, "--:O:s:d:f:m:i:l:a:p:hqgFL:k:")) != -1) {
/* ignore long options starting with '--' and their arguments that are handled by configmodule */ /* ignore long options starting with '--', option '-O' and their arguments that are handled by configmodule */
/* with this opstring getopt returns 1 for non-option arguments, refer to 'man 3 getopt' */ /* with this opstring getopt returns 1 for non-option arguments, refer to 'man 3 getopt' */
if (arguments == 1 || arguments == '-') if (arguments == 1 || arguments == '-' || arguments == 'O')
continue; continue;
printf("handling optarg %c\n",arguments); printf("handling optarg %c\n",arguments);
@@ -32,11 +32,11 @@ int main(int argc, char *argv[])
} }
logInit(); logInit();
while ((arguments = getopt(argc, argv, "--:s:d:f:l:i:mhg")) != -1) { while ((arguments = getopt(argc, argv, "--:O:s:d:f:l:i:mhg")) != -1) {
/* ignore long options starting with '--' and their arguments that are handled by configmodule */ /* ignore long options starting with '--', option '-O' and their arguments that are handled by configmodule */
/* with this opstring getopt returns 1 for non-option arguments, refer to 'man 3 getopt' */ /* with this opstring getopt returns 1 for non-option arguments, refer to 'man 3 getopt' */
if (arguments == 1 || arguments == '-') if (arguments == 1 || arguments == '-' || arguments == 'O')
continue; continue;
printf("handling optarg %c\n",arguments); printf("handling optarg %c\n",arguments);
@@ -11,7 +11,12 @@ data storage. */
#include<math.h> #include<math.h>
#include<complex.h> #include<complex.h>
#include <stdlib.h> #include <stdlib.h>
#include <linux/version.h>
#if defined RHEL_RELEASE_CODE
#include <cblas/cblas.h>
#else
#include <cblas.h> #include <cblas.h>
#endif
#include <string.h> #include <string.h>
#include <linux/version.h> #include <linux/version.h>
#include <lapacke_utils.h> #include <lapacke_utils.h>
@@ -22,8 +27,8 @@ data storage. */
void transpose (int N, float complex *A, float complex *Result) void transpose (int N, float complex *A, float complex *Result)
{ {
// COnputes C := alpha*op(A)*op(B) + beta*C, // COnputes C := alpha*op(A)*op(B) + beta*C,
enum CBLAS_TRANSPOSE transa = CblasTrans; CBLAS_TRANSPOSE transa = CblasTrans;
enum CBLAS_TRANSPOSE transb = CblasNoTrans; CBLAS_TRANSPOSE transb = CblasNoTrans;
int rows_opA = N; // number of rows in op(A) and in C int rows_opA = N; // number of rows in op(A) and in C
int col_opB = N; //number of columns of op(B) and in C int col_opB = N; //number of columns of op(B) and in C
int col_opA = N; //number of columns in op(A) and rows in op(B) int col_opA = N; //number of columns in op(A) and rows in op(B)
@@ -62,8 +67,8 @@ void transpose (int N, float complex *A, float complex *Result)
void conjugate_transpose (int N, float complex *A, float complex *Result) void conjugate_transpose (int N, float complex *A, float complex *Result)
{ {
// Computes C := alpha*op(A)*op(B) + beta*C, // Computes C := alpha*op(A)*op(B) + beta*C,
enum CBLAS_TRANSPOSE transa = CblasConjTrans; CBLAS_TRANSPOSE transa = CblasConjTrans;
enum CBLAS_TRANSPOSE transb = CblasNoTrans; CBLAS_TRANSPOSE transb = CblasNoTrans;
int rows_opA = N; // number of rows in op(A) and in C int rows_opA = N; // number of rows in op(A) and in C
int col_opB = N; //number of columns of op(B) and in C int col_opB = N; //number of columns of op(B) and in C
int col_opA = N; //number of columns in op(A) and rows in op(B) int col_opA = N; //number of columns in op(A) and rows in op(B)
@@ -100,8 +105,8 @@ void conjugate_transpose (int N, float complex *A, float complex *Result)
void H_hermH_plus_sigma2I (int N, int M, float complex *A, float sigma2, float complex *Result) void H_hermH_plus_sigma2I (int N, int M, float complex *A, float sigma2, float complex *Result)
{ {
//C := alpha*op(A)*op(B) + beta*C, //C := alpha*op(A)*op(B) + beta*C,
enum CBLAS_TRANSPOSE transa = CblasConjTrans; CBLAS_TRANSPOSE transa = CblasConjTrans;
enum CBLAS_TRANSPOSE transb = CblasNoTrans; CBLAS_TRANSPOSE transb = CblasNoTrans;
int rows_opA = N; // number of rows in op(A) and in C int rows_opA = N; // number of rows in op(A) and in C
int col_opB = N; //number of columns of op(B) and in C int col_opB = N; //number of columns of op(B) and in C
int col_opA = N; //number of columns in op(A) and rows in op(B) int col_opA = N; //number of columns in op(A) and rows in op(B)
@@ -127,8 +132,8 @@ void H_hermH_plus_sigma2I (int N, int M, float complex *A, float sigma2, float c
void HH_herm_plus_sigma2I (int M, int N, float complex *A, float sigma2, float complex *Result) void HH_herm_plus_sigma2I (int M, int N, float complex *A, float sigma2, float complex *Result)
{ {
//C := alpha*op(A)*op(B) + beta*C, //C := alpha*op(A)*op(B) + beta*C,
enum CBLAS_TRANSPOSE transa = CblasNoTrans; CBLAS_TRANSPOSE transa = CblasNoTrans;
enum CBLAS_TRANSPOSE transb = CblasConjTrans; CBLAS_TRANSPOSE transb = CblasConjTrans;
int k = N; //number of columns in op(A) and rows in op(B),k int k = N; //number of columns in op(A) and rows in op(B),k
float complex alpha = 1.0+I*0; float complex alpha = 1.0+I*0;
int lda = N; int lda = N;
@@ -195,8 +200,8 @@ void eigen_vectors_values (int N, float complex *A, float complex *Vectors, floa
} }
void mutl_matrix_matrix_row_based(float complex* M0, float complex* M1, int rows_M0, int col_M0, int rows_M1, int col_M1, float complex* Result ){ void mutl_matrix_matrix_row_based(float complex* M0, float complex* M1, int rows_M0, int col_M0, int rows_M1, int col_M1, float complex* Result ){
enum CBLAS_TRANSPOSE transa = CblasNoTrans; CBLAS_TRANSPOSE transa = CblasNoTrans;
enum CBLAS_TRANSPOSE transb = CblasNoTrans; CBLAS_TRANSPOSE transb = CblasNoTrans;
int rows_opA = rows_M0; // number of rows in op(A) and in C int rows_opA = rows_M0; // number of rows in op(A) and in C
int col_opB = col_M1; //number of columns of op(B) and in C int col_opB = col_M1; //number of columns of op(B) and in C
int col_opA = col_M0; //number of columns in op(A) and rows in op(B) int col_opA = col_M0; //number of columns in op(A) and rows in op(B)
@@ -226,8 +231,8 @@ void mutl_matrix_matrix_row_based(float complex* M0, float complex* M1, int rows
} }
void mutl_matrix_matrix_col_based(float complex* M0, float complex* M1, int rows_M0, int col_M0, int rows_M1, int col_M1, float complex* Result ){ void mutl_matrix_matrix_col_based(float complex* M0, float complex* M1, int rows_M0, int col_M0, int rows_M1, int col_M1, float complex* Result ){
enum CBLAS_TRANSPOSE transa = CblasNoTrans; CBLAS_TRANSPOSE transa = CblasNoTrans;
enum CBLAS_TRANSPOSE transb = CblasNoTrans; CBLAS_TRANSPOSE transb = CblasNoTrans;
int rows_opA = rows_M0; // number of rows in op(A) and in C int rows_opA = rows_M0; // number of rows in op(A) and in C
int col_opB = col_M1; //number of columns of op(B) and in C int col_opB = col_M1; //number of columns of op(B) and in C
int col_opA = col_M0; //number of columns in op(A) and rows in op(B) int col_opA = col_M0; //number of columns in op(A) and rows in op(B)
+1 -1
View File
@@ -630,7 +630,7 @@ int main(int argc, char **argv) {
{ "lMuMimo", "offset_mumimo_llr_drange_fix",0, .u8ptr=&offset_mumimo_llr_drange_fix, .defintval=0, TYPE_UINT8, 0 }, { "lMuMimo", "offset_mumimo_llr_drange_fix",0, .u8ptr=&offset_mumimo_llr_drange_fix, .defintval=0, TYPE_UINT8, 0 },
{ "mcs1", "The MCS for TB 1", 0, .iptr=&mcs1, .defintval=0, TYPE_INT, 0 }, { "mcs1", "The MCS for TB 1", 0, .iptr=&mcs1, .defintval=0, TYPE_INT, 0 },
{ "Mcs2", "The MCS for TB 2", 0, .iptr=&mcs2, .defintval=0, TYPE_INT, 0 }, { "Mcs2", "The MCS for TB 2", 0, .iptr=&mcs2, .defintval=0, TYPE_INT, 0 },
{ "Operf", "Set the percenatge of effective rate to testbench the modem performance (typically 30 and 70, range 1-100)",0, .iptr=&test_perf, .defintval=0, TYPE_INT, 0 }, { "Tperf", "Set the percenatge of effective rate to testbench the modem performance (typically 30 and 70, range 1-100)",0, .iptr=&test_perf, .defintval=0, TYPE_INT, 0 },
{ "tmcs_i", "MCS of interfering UE",0, .iptr=NULL, .defintval=0, TYPE_INT, 0 }, { "tmcs_i", "MCS of interfering UE",0, .iptr=NULL, .defintval=0, TYPE_INT, 0 },
{ "nb_frame", "number of frame in a test",0, .iptr=&n_frames, .defintval=1, TYPE_INT, 0 }, { "nb_frame", "number of frame in a test",0, .iptr=&n_frames, .defintval=1, TYPE_INT, 0 },
{ "offsetRxSample", "Sample offset for receiver", 0, .iptr=&rx_sample_offset, .defintval=0, TYPE_INT, 0 }, { "offsetRxSample", "Sample offset for receiver", 0, .iptr=&rx_sample_offset, .defintval=0, TYPE_INT, 0 },
+1 -1
View File
@@ -438,7 +438,7 @@ int main(int argc, char **argv) {
{ "bundling_disable", "bundling disable",PARAMFLAG_BOOL, .iptr=&disable_bundling, .defintval=0, TYPE_INT, 0 }, { "bundling_disable", "bundling disable",PARAMFLAG_BOOL, .iptr=&disable_bundling, .defintval=0, TYPE_INT, 0 },
{ "Y", "n_ch_rlz",0, .iptr=&n_ch_rlz, .defintval=1, TYPE_INT, 0 }, { "Y", "n_ch_rlz",0, .iptr=&n_ch_rlz, .defintval=1, TYPE_INT, 0 },
{ "X", "abstx", PARAMFLAG_BOOL, .iptr=&abstx, .defintval=0, TYPE_INT, 0 }, { "X", "abstx", PARAMFLAG_BOOL, .iptr=&abstx, .defintval=0, TYPE_INT, 0 },
{ "Operf", "Set the percentage of effective rate to testbench the modem performance (typically 30 and 70, range 1-100)",0, .iptr=&test_perf, .defintval=0, TYPE_INT, 0 }, { "Tperf", "Set the percentage of effective rate to testbench the modem performance (typically 30 and 70, range 1-100)",0, .iptr=&test_perf, .defintval=0, TYPE_INT, 0 },
{ "verbose", "display debug text", PARAMFLAG_BOOL, .iptr=&verbose, .defintval=0, TYPE_INT, 0 }, { "verbose", "display debug text", PARAMFLAG_BOOL, .iptr=&verbose, .defintval=0, TYPE_INT, 0 },
{ "help", "display help and exit", PARAMFLAG_BOOL, .iptr=&help, .defintval=0, TYPE_INT, 0 }, { "help", "display help and exit", PARAMFLAG_BOOL, .iptr=&help, .defintval=0, TYPE_INT, 0 },
{ "", "",0, .iptr=NULL, .defintval=0, TYPE_INT, 0 }, { "", "",0, .iptr=NULL, .defintval=0, TYPE_INT, 0 },
+2 -2
View File
@@ -146,11 +146,11 @@ int main(int argc, char **argv)
// logInit(); // logInit();
randominit(0); randominit(0);
while ((c = getopt(argc, argv, "--:df:hpVg:i:j:n:l:m:r:s:S:y:z:M:N:F:R:P:L:X:")) != -1) { while ((c = getopt(argc, argv, "--:O:df:hpVg:i:j:n:l:m:r:s:S:y:z:M:N:F:R:P:L:X:")) != -1) {
/* ignore long options starting with '--' and their arguments that are handled by configmodule */ /* ignore long options starting with '--' and their arguments that are handled by configmodule */
/* with this opstring getopt returns 1 for non-option arguments, refer to 'man 3 getopt' */ /* with this opstring getopt returns 1 for non-option arguments, refer to 'man 3 getopt' */
if (c == 1 || c == '-') if (c == 1 || c == '-' || c == 'O')
continue; continue;
printf("handling optarg %c\n",c); printf("handling optarg %c\n",c);
+3 -3
View File
@@ -336,11 +336,11 @@ int main(int argc, char **argv)
FILE *scg_fd=NULL; FILE *scg_fd=NULL;
while ((c = getopt(argc, argv, "--:f:hA:p:f:g:i:n:s:S:t:v:x:y:z:o:M:N:F:GR:d:PI:L:a:b:e:m:w:T:U:q:X:Y:Z:c")) != -1) { while ((c = getopt(argc, argv, "--:O:f:hA:p:f:g:i:n:s:S:t:v:x:y:z:o:M:N:F:GR:d:PI:L:a:b:e:m:w:T:U:q:X:Y:Z:c")) != -1) {
/* ignore long options starting with '--' and their arguments that are handled by configmodule */ /* ignore long options starting with '--', option '-O' and their arguments that are handled by configmodule */
/* with this opstring getopt returns 1 for non-option arguments, refer to 'man 3 getopt' */ /* with this opstring getopt returns 1 for non-option arguments, refer to 'man 3 getopt' */
if (c == 1 || c == '-') if (c == 1 || c == '-' || c == 'O')
continue; continue;
printf("handling optarg %c\n",c); printf("handling optarg %c\n",c);
+9 -8
View File
@@ -244,15 +244,20 @@ int main(int argc, char **argv)
exit_fun("[NR_PBCHSIM] Error, configuration module init failed\n"); exit_fun("[NR_PBCHSIM] Error, configuration module init failed\n");
} }
while ((c = getopt (argc, argv, "--:F:g:hIL:m:M:n:N:o:O:P:r:R:s:S:x:y:z:")) != -1) { while ((c = getopt (argc, argv, "--:O:c:F:g:hIL:m:M:n:N:o:P:r:R:s:S:x:y:z:")) != -1) {
/* ignore long options starting with '--' and their arguments that are handled by configmodule */ /* ignore long options starting with '--', option '-O' and their arguments that are handled by configmodule */
/* with this opstring getopt returns 1 for non-option arguments, refer to 'man 3 getopt' */ /* with this opstring getopt returns 1 for non-option arguments, refer to 'man 3 getopt' */
if (c == 1 || c == '-') if (c == 1 || c == '-' || c == 'O')
continue; continue;
printf("handling optarg %c\n",c); printf("handling optarg %c\n",c);
switch (c) { switch (c) {
case 'c':
ssb_subcarrier_offset = atoi(optarg);
break;
/*case 'f': /*case 'f':
write_output_file=1; write_output_file=1;
output_fd = fopen(optarg,"w"); output_fd = fopen(optarg,"w");
@@ -349,10 +354,6 @@ int main(int argc, char **argv)
Nid_cell = atoi(optarg); Nid_cell = atoi(optarg);
break; break;
case 'O':
ssb_subcarrier_offset = atoi(optarg);
break;
case 'o': case 'o':
cfo = atof(optarg); cfo = atof(optarg);
#ifdef DEBUG_NR_PBCHSIM #ifdef DEBUG_NR_PBCHSIM
@@ -440,6 +441,7 @@ int main(int argc, char **argv)
printf("%s -F input_filename -g channel_mod -h(elp) -I(nitial sync) -L log_lvl -n n_frames -M SSBs -n frames -N cell_id -o FO -P phase -r seed -R RBs -s snr0 -S snr1 -x transmission_mode -y TXant -z RXant\n", printf("%s -F input_filename -g channel_mod -h(elp) -I(nitial sync) -L log_lvl -n n_frames -M SSBs -n frames -N cell_id -o FO -P phase -r seed -R RBs -s snr0 -S snr1 -x transmission_mode -y TXant -z RXant\n",
argv[0]); argv[0]);
//printf("-A Interpolation_filname Run with Abstraction to generate Scatter plot using interpolation polynomial in file\n"); //printf("-A Interpolation_filname Run with Abstraction to generate Scatter plot using interpolation polynomial in file\n");
printf("-c SSB subcarrier offset\n");
//printf("-C Generate Calibration information for Abstraction (effective SNR adjustment to remove Pe bias w.r.t. AWGN)\n"); //printf("-C Generate Calibration information for Abstraction (effective SNR adjustment to remove Pe bias w.r.t. AWGN)\n");
//printf("-d Use TDD\n"); //printf("-d Use TDD\n");
//printf("-f Output filename (.txt format) for Pe/SNR results\n"); //printf("-f Output filename (.txt format) for Pe/SNR results\n");
@@ -455,7 +457,6 @@ int main(int argc, char **argv)
printf("-n Number of frames to simulate\n"); printf("-n Number of frames to simulate\n");
printf("-N Nid_cell\n"); printf("-N Nid_cell\n");
printf("-o Carrier frequency offset in Hz\n"); printf("-o Carrier frequency offset in Hz\n");
printf("-O SSB subcarrier offset\n");
//printf("-O oversampling factor (1,2,4,8,16)\n"); //printf("-O oversampling factor (1,2,4,8,16)\n");
//printf("-p Use extended prefix mode\n"); //printf("-p Use extended prefix mode\n");
printf("-P PBCH phase, allowed values 0-3\n"); printf("-P PBCH phase, allowed values 0-3\n");
+3 -3
View File
@@ -164,11 +164,11 @@ int main(int argc, char **argv){
randominit(0); randominit(0);
while ((c = getopt (argc, argv, "--:hHaA:Cc:l:r:p:g:m:n:s:S:t:x:y:v:V:z:N:F:d:Z:L:R:E")) != -1) { while ((c = getopt (argc, argv, "--:O:hHaA:Cc:l:r:p:g:m:n:s:S:t:x:y:v:V:z:N:F:d:Z:L:R:E")) != -1) {
/* ignore long options starting with '--' and their arguments that are handled by configmodule */ /* ignore long options starting with '--', option '-O' and their arguments that are handled by configmodule */
/* with this opstring getopt returns 1 for non-option arguments, refer to 'man 3 getopt' */ /* with this opstring getopt returns 1 for non-option arguments, refer to 'man 3 getopt' */
if (c == 1 || c == '-') if (c == 1 || c == '-' || c == 'O')
continue; continue;
printf("handling optarg %c\n",c); printf("handling optarg %c\n",c);
+3 -3
View File
@@ -320,11 +320,11 @@ int main(int argc, char **argv)
randominit(0); randominit(0);
while ((c = getopt(argc, argv, "--:c:hn:o:s:FIL:N:R:S:T:")) != -1) { while ((c = getopt(argc, argv, "--:O:c:hn:o:s:FIL:N:R:S:T:")) != -1) {
/* ignore long options starting with '--' and their arguments that are handled by configmodule */ /* ignore long options starting with '--', option '-O' and their arguments that are handled by configmodule */
/* with this opstring getopt returns 1 for non-option arguments, refer to 'man 3 getopt' */ /* with this opstring getopt returns 1 for non-option arguments, refer to 'man 3 getopt' */
if (c == 1 || c == '-') if (c == 1 || c == '-' || c == 'O')
continue; continue;
printf("SIDELINK PSBCH SIM: handling optarg %c\n", c); printf("SIDELINK PSBCH SIM: handling optarg %c\n", c);
+3 -3
View File
@@ -155,11 +155,11 @@ int main(int argc, char **argv)
randominit(0); randominit(0);
logInit(); logInit();
while ((c = getopt (argc, argv, "--:f:hA:f:g:i:I:P:B:b:t:T:m:n:r:o:s:S:x:y:z:N:F:GR:IL:q:cd:")) != -1) { while ((c = getopt (argc, argv, "--:O:f:hA:f:g:i:I:P:B:b:t:T:m:n:r:o:s:S:x:y:z:N:F:GR:IL:q:cd:")) != -1) {
/* ignore long options starting with '--' and their arguments that are handled by configmodule */ /* ignore long options starting with '--', option '-O' and their arguments that are handled by configmodule */
/* with this opstring getopt returns 1 for non-option arguments, refer to 'man 3 getopt' */ /* with this opstring getopt returns 1 for non-option arguments, refer to 'man 3 getopt' */
if (c == 1 || c == '-') if (c == 1 || c == '-' || c == 'O')
continue; continue;
printf("handling optarg %c\n",c); printf("handling optarg %c\n",c);
+3 -3
View File
@@ -166,11 +166,11 @@ int main(int argc, char **argv)
randominit(0); randominit(0);
//while ((c = getopt(argc, argv, "--:df:hpg:i:j:n:l:m:r:s:S:y:z:M:N:F:R:P:")) != -1) { //while ((c = getopt(argc, argv, "--:df:hpg:i:j:n:l:m:r:s:S:y:z:M:N:F:R:P:")) != -1) {
while ((c = getopt(argc, argv, "--:hg:n:s:S:py:z:M:N:R:F:m:l:q:r:W:")) != -1) { while ((c = getopt(argc, argv, "--:O:hg:n:s:S:py:z:M:N:R:F:m:l:q:r:W:")) != -1) {
/* ignore long options starting with '--' and their arguments that are handled by configmodule */ /* ignore long options starting with '--', option '-O' and their arguments that are handled by configmodule */
/* with this opstring getopt returns 1 for non-option arguments, refer to 'man 3 getopt' */ /* with this opstring getopt returns 1 for non-option arguments, refer to 'man 3 getopt' */
if (c == 1 || c == '-') if (c == 1 || c == '-' || c == 'O')
continue; continue;
printf("handling optarg %c\n",c); printf("handling optarg %c\n",c);
+3 -3
View File
@@ -223,11 +223,11 @@ int main(int argc, char *argv[])
/* initialize the sin-cos table */ /* initialize the sin-cos table */
InitSinLUT(); InitSinLUT();
while ((c = getopt(argc, argv, "--:a:b:c:d:ef:g:h:i:k:m:n:op:q:r:s:t:u:v:w:y:z:C:F:G:H:I:M:N:PR:S:T:U:L:ZW:E:X:")) != -1) { while ((c = getopt(argc, argv, "--:O:a:b:c:d:ef:g:h:i:k:m:n:op:q:r:s:t:u:v:w:y:z:C:F:G:H:I:M:N:PR:S:T:U:L:ZW:E:X:")) != -1) {
/* ignore long options starting with '--' and their arguments that are handled by configmodule */ /* ignore long options starting with '--', option '-O' and their arguments that are handled by configmodule */
/* with this opstring getopt returns 1 for non-option arguments, refer to 'man 3 getopt' */ /* with this opstring getopt returns 1 for non-option arguments, refer to 'man 3 getopt' */
if (c == 1 || c == '-') if (c == 1 || c == '-' || c == 'O')
continue; continue;
printf("handling optarg %c\n",c); printf("handling optarg %c\n",c);
@@ -5200,9 +5200,9 @@ bool supported_bw_comparison(int bw_mhz, NR_SupportedBandwidth_t *supported_BW,
return false; return false;
} }
uint16_t compute_PDU_length(uint32_t num_TLV, uint16_t total_length) uint32_t compute_PDU_length(uint32_t num_TLV, uint16_t total_length)
{ {
uint8_t pdu_length = 8; // 2 bytes PDU_Length + 2 bytes PDU_Index + 4 bytes num_TLV uint32_t pdu_length = 8; // 2 bytes PDU_Length + 2 bytes PDU_Index + 4 bytes num_TLV
// For each TLV, add 2 bytes tag + 2 bytes length + value size without padding // For each TLV, add 2 bytes tag + 2 bytes length + value size without padding
pdu_length += (num_TLV * 4) + total_length; pdu_length += (num_TLV * 4) + total_length;
return pdu_length; return pdu_length;
@@ -311,7 +311,7 @@ void compute_csi_bitlen(const NR_CSI_MeasConfig_t *csi_MeasConfig, nr_csi_report
uint16_t nr_get_csi_bitlen(nr_csi_report_t *csi_report); uint16_t nr_get_csi_bitlen(nr_csi_report_t *csi_report);
uint16_t compute_PDU_length(uint32_t num_TLV, uint16_t total_length); uint32_t compute_PDU_length(uint32_t num_TLV, uint16_t total_length);
rnti_t nr_get_ra_rnti(uint8_t s_id, uint8_t t_id, uint8_t f_id, uint8_t ul_carrier_id); rnti_t nr_get_ra_rnti(uint8_t s_id, uint8_t t_id, uint8_t f_id, uint8_t ul_carrier_id);
@@ -1353,7 +1353,7 @@ int nr_acknack_scheduling(gNB_MAC_INST *mac,
return pucch_index; // index of current PUCCH structure return pucch_index; // index of current PUCCH structure
} }
} }
LOG_W(NR_MAC, "DL %4d.%2d, Couldn't find scheduling occasion for this HARQ process\n", frame, slot); LOG_D(NR_MAC, "DL %4d.%2d, Couldn't find scheduling occasion for this HARQ process\n", frame, slot);
return -1; return -1;
} }
-2
View File
@@ -1,2 +0,0 @@
add_subdirectory(DS)
-2
View File
@@ -1,2 +0,0 @@
Algorithms and Data Structures in C for common usage
-2
View File
@@ -1,2 +0,0 @@
add_subdirectory(ALG_DS)