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:
+4
-31
@@ -21,7 +21,7 @@
|
||||
|
||||
# Author: laurent THOMAS, Lionel GAUTHIER
|
||||
|
||||
cmake_minimum_required (VERSION 3.12)
|
||||
cmake_minimum_required (VERSION 3.16)
|
||||
project (OpenAirInterface LANGUAGES C CXX)
|
||||
|
||||
#########################################################
|
||||
@@ -180,22 +180,6 @@ add_boolean_option(SANITIZE_ADDRESS False "enable the address sanitizer (ASan)"
|
||||
if (SANITIZE_ADDRESS)
|
||||
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")
|
||||
# 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 ()
|
||||
|
||||
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)
|
||||
|
||||
add_library(UTIL
|
||||
${OPENAIR_DIR}/common/utils/LOG/log.c
|
||||
${OPENAIR_DIR}/common/utils/LOG/vcd_signal_dumper.c
|
||||
${OPENAIR2_DIR}/UTIL/MATH/oml.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)
|
||||
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()
|
||||
message(STATUS "LTTNG support disabled")
|
||||
endif()
|
||||
@@ -674,7 +649,7 @@ if (cap_FOUND)
|
||||
target_link_libraries(UTIL PRIVATE cap)
|
||||
target_compile_definitions(UTIL PRIVATE HAVE_LIB_CAP)
|
||||
endif()
|
||||
target_link_libraries(UTIL PUBLIC ${T_LIB} pthread)
|
||||
target_link_libraries(UTIL PUBLIC ${T_LIB} pthread LOG thread-pool utils)
|
||||
|
||||
set(SECURITY_SRC
|
||||
${OPENAIR3_DIR}/SECU/secu_defs.c
|
||||
@@ -1207,10 +1182,9 @@ set(PHY_MEX_UE
|
||||
${OPENAIR1_DIR}/PHY/TOOLS/simde_operations.c
|
||||
${OPENAIR1_DIR}/PHY/LTE_UE_TRANSPORT/dlsch_llr_computation_avx2.c
|
||||
${OPENAIR1_DIR}/PHY/LTE_ESTIMATION/lte_ue_measurements.c
|
||||
${OPENAIR_DIR}/common/utils/LOG/log.c
|
||||
)
|
||||
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
|
||||
#####################
|
||||
@@ -1949,10 +1923,9 @@ set(CMAKE_MODULE_PATH "${OPENAIR_DIR}/cmake_targets/tools/MODULES" "${CMAKE_MODU
|
||||
# add executables for operation
|
||||
#################################
|
||||
add_library(minimal_lib
|
||||
${OPENAIR_DIR}/common/utils/LOG/log.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
|
||||
${OPENAIR_DIR}/openair2/NR_PHY_INTERFACE/nfapi_5g_test.c
|
||||
|
||||
@@ -4,12 +4,12 @@
|
||||
|
||||
<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://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/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-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 align="center">
|
||||
@@ -70,11 +70,11 @@ openairinterface5g
|
||||
├── executables : Top-level executable source files (gNB, eNB, ...)
|
||||
├── maketags : Script to generate emacs tags.
|
||||
├── 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.
|
||||
├── 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.
|
||||
├── openair3 : 3GPP LTE Rel10 for S1AP, NAS GTPV1-U for both ENB and UE.
|
||||
├── openair1 : Layer 1 (3GPP LTE Rel-10/12 PHY, NR Rel-15 PHY)
|
||||
├── 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 : Layer 3 (3GPP LTE Rel-10 S1AP/GTP, NR Rel-15 NGAP/GTP)
|
||||
├── 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
|
||||
```
|
||||
|
||||
|
||||
@@ -286,7 +286,7 @@ class Containerize():
|
||||
self.host = result.group(0)
|
||||
if self.host == 'Ubuntu':
|
||||
self.cli = 'docker'
|
||||
self.dockerfileprefix = '.ubuntu20'
|
||||
self.dockerfileprefix = '.ubuntu22'
|
||||
self.cliBuildOptions = ''
|
||||
elif self.host == 'Red Hat':
|
||||
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"'))
|
||||
result = re.search('build_cross_arm64', self.imageKind)
|
||||
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
|
||||
if self.forcedWorkspaceCleanup:
|
||||
@@ -677,7 +677,7 @@ class Containerize():
|
||||
return False
|
||||
|
||||
# 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')
|
||||
if ret.returncode != 0:
|
||||
build_log_name = f'build_log_{self.testCase_id}'
|
||||
|
||||
+1
-1
@@ -21,7 +21,7 @@
|
||||
#---------------------------------------------------------------------
|
||||
#
|
||||
# Dockerfile for the Open-Air-Interface BUILD service
|
||||
# Valid for Ubuntu 20.04
|
||||
# Valid for Ubuntu 22.04
|
||||
#
|
||||
#---------------------------------------------------------------------
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
This page is only valid for an `Ubuntu18` host.
|
||||
This page is only valid for an `Ubuntu 22` host.
|
||||
|
||||
**Table of Contents**
|
||||
|
||||
|
||||
@@ -12,10 +12,8 @@
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
This page is valid for an `Ubuntu18` host.
|
||||
It is also valid for `Ubuntu 20.04`.
|
||||
It is also valid for `Ubuntu 22.04`.
|
||||
|
||||
This tutorial is only valid once this file is merged into the `develop` branch.
|
||||
# 1. Adapt the `docker-compose` to your environment #
|
||||
The yaml file is in the following directory: `ci-scripts/yaml_files/5g_l2sim_tdd`
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
</tr>
|
||||
</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`.**
|
||||
|
||||
|
||||
@@ -12,15 +12,15 @@
|
||||
(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>
|
||||
<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
|
||||
-m=4 -g=F -s=0 -w=1.0 -f=.2 -n=500 -B=6 -c=4 -z=2 -O=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=25 -c=2 -z=2 -O=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=25 -c=2 -z=2 -O=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.5 -w=1.0 -f=.2 -n=500 -B=25 -c=3 -z=2 -r=1022 -O=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>
|
||||
<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 -Tperf=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 -Tperf=60
|
||||
-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 -Tperf=25
|
||||
-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 -Tperf=60
|
||||
-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>
|
||||
<search_expr_true>"passed"</search_expr_true>
|
||||
<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 1b: 5 MHz, R.11-2 FDD (MCS 13), EVA5, 5.9 dB (70%))</desc>
|
||||
<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
|
||||
-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=16.6 -w=1.0 -f=.2 -n=500 -B=100 -c=2 -z=2 -r=1899 -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 -O=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>
|
||||
<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 -Tperf=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 -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 -Tperf=60</main_exec_args>
|
||||
<tags>test15 test15b test15c TM2_test1 TM2_test1b</tags>
|
||||
<search_expr_true>"passed"</search_expr_true>
|
||||
<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 6: 20 MHz, FDD (MCS 16), AWGN, 12 dB (70%))</desc>
|
||||
<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
|
||||
-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=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=16 -yN_rx=1 -gchannel=N -xTransmission=1 -snr=12 -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 -Operf=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>
|
||||
<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 -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 -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 -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 -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 -Tperf=70</main_exec_args>
|
||||
<tags>test1 test2 test3 test4 test5 test6</tags>
|
||||
<search_expr_true>"passed"</search_expr_true>
|
||||
<search_expr_false>segmentation fault|assertion|exiting|fatal</search_expr_false>
|
||||
@@ -116,7 +116,7 @@
|
||||
<main_exec>nr_pbchsim</main_exec>
|
||||
<main_exec_args>-s-11 -S-8 -n10 -R106 -N2
|
||||
-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>
|
||||
<search_expr_true>PBCH test OK</search_expr_true>
|
||||
<search_expr_false>segmentation fault|assertion|exiting|fatal</search_expr_false>
|
||||
|
||||
@@ -52,7 +52,7 @@ TARGET_LIST=""
|
||||
function print_help() {
|
||||
echo_info "
|
||||
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:
|
||||
--arch-native
|
||||
Passes -march=native to the compiler.
|
||||
@@ -418,7 +418,6 @@ function main() {
|
||||
CMAKE_CMD="$CMAKE_CMD -DSANITIZE_ADDRESS=True -DSANITIZE_UNDEFINED=True"
|
||||
shift;;
|
||||
--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"
|
||||
shift;;
|
||||
--sanitize-undefined | -fsanitize=undefined)
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
set(CMAKE_SYSTEM_NAME Linux)
|
||||
set(CMAKE_SYSTEM_PROCESSOR arm)
|
||||
|
||||
set(CMAKE_C_COMPILER /usr/bin/aarch64-linux-gnu-gcc-9)
|
||||
set(CMAKE_CXX_COMPILER /usr/bin/aarch64-linux-gnu-g++-9)
|
||||
set(CMAKE_C_COMPILER /usr/bin/aarch64-linux-gnu-gcc-11)
|
||||
set(CMAKE_CXX_COMPILER /usr/bin/aarch64-linux-gnu-g++-11)
|
||||
|
||||
set(CROSS_COMPILE 1)
|
||||
set(bnProc_gen_128_DIR ${CMAKE_CURRENT_BINARY_DIR}/${NATIVE_DIR}) # /../build)
|
||||
|
||||
@@ -103,11 +103,11 @@ get_distribution_release() {
|
||||
check_supported_distribution() {
|
||||
local distribution=$(get_distribution_release)
|
||||
case "$distribution" in
|
||||
"ubuntu24.04") return 0 ;;
|
||||
"ubuntu23.10") return 0 ;;
|
||||
"ubuntu22.04") return 0 ;;
|
||||
"ubuntu21.04") return 0 ;;
|
||||
"ubuntu20.04") return 0 ;;
|
||||
"ubuntu18.04") return 0 ;;
|
||||
"debian11") return 0 ;;
|
||||
"fedora36") 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.15.0 -y || true
|
||||
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
|
||||
fi
|
||||
v=$(lsb_release -cs)
|
||||
@@ -351,7 +351,7 @@ check_install_usrp_uhd_driver(){
|
||||
$SUDO apt-get update
|
||||
$SUDO apt-get -y install python-tk $boost_libs_ubuntu libusb-1.0-0-dev
|
||||
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
|
||||
;;
|
||||
esac
|
||||
@@ -528,24 +528,11 @@ check_install_soapy () {
|
||||
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 (){
|
||||
$SUDO $INSTALLER update -y
|
||||
local optional_packages=""
|
||||
if [[ "$OS_BASEDISTRO" == "debian" ]]; then
|
||||
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" )
|
||||
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
|
||||
$SUDO apt install -y software-properties-common
|
||||
case "$(get_distribution_release)" in
|
||||
"ubuntu18.04")
|
||||
add_cmake_repo
|
||||
specific_packages=""
|
||||
;;
|
||||
"debian11")
|
||||
specific_packages="libz-dev"
|
||||
;;
|
||||
@@ -602,7 +585,6 @@ check_install_oai_software() {
|
||||
ninja-build \
|
||||
pkg-config \
|
||||
git \
|
||||
libatlas-base-dev \
|
||||
libblas-dev \
|
||||
liblapack-dev \
|
||||
liblapacke-dev \
|
||||
|
||||
@@ -11,3 +11,8 @@ endif()
|
||||
|
||||
add_subdirectory(T)
|
||||
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})
|
||||
|
||||
@@ -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()
|
||||
@@ -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 .)
|
||||
@@ -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;
|
||||
}
|
||||
@@ -33,17 +33,6 @@
|
||||
#include <sys/sysinfo.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) {
|
||||
mutexlock(nf->lockF);
|
||||
@@ -176,121 +165,3 @@ void initFloatingCoresTpool(int nbThreads,tpool_t *pool, bool performanceMeas, c
|
||||
threads[sizeof(threads)-1]=0;
|
||||
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
|
||||
|
||||
@@ -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)
|
||||
```bash
|
||||
~$ cd ~/openairinterface5g/
|
||||
~/openairinterface5g$ docker build . -f docker/Dockerfile.base.ubuntu20 --tag ran-base:latest
|
||||
~/openairinterface5g$ docker build . -f docker/Dockerfile.gNB.aerial.ubuntu20 --tag oai-gnb-aerial:latest
|
||||
~/openairinterface5g$ docker build . -f docker/Dockerfile.base.ubuntu22 --tag ran-base:latest
|
||||
~/openairinterface5g$ docker build . -f docker/Dockerfile.gNB.aerial.ubuntu22 --tag oai-gnb-aerial:latest
|
||||
```
|
||||
|
||||
|
||||
|
||||
+1
-1
@@ -149,7 +149,7 @@ cd openairinterface5g/cmake_targets/
|
||||
|
||||
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
|
||||
|
||||
|
||||
+7
-10
@@ -117,9 +117,7 @@ Furthermore, the gNB and UE support
|
||||
- evalution of RSRP report
|
||||
- evaluation of CQI report
|
||||
- MAC scheduling of SR reception
|
||||
- Bandwidth part (BWP) operation
|
||||
- Handle multiple dedicated BWPs, supports one UE
|
||||
- BWP switching through RRCReconfiguration method
|
||||
- Support of up to 16 UEs (can be increased to 32)
|
||||
|
||||
## 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)
|
||||
- LTE RRC (36.331) also updated to Rel 15
|
||||
- Generation of CellGroupConfig (for eNB) and MIB
|
||||
- Generation of system information block 1 (SIB1)
|
||||
- Generation of system information block 2 (SIB2)
|
||||
- Application to read configuration file and program gNB RRC
|
||||
- Generation of MIB/SIB1 (received from DU)
|
||||
- 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
|
||||
- RRCSetupRequest/RRCSetup/RRCSetupComplete
|
||||
- RRC Uplink/Downlink Information transfer carrying NAS messages transparently
|
||||
- RRC Reconfiguration/Reconfiguration 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 F1AP for CU/DU split deployment option
|
||||
- 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 gNB CU configuration update
|
||||
- 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
|
||||
|
||||
@@ -216,6 +212,7 @@ Furthermore, the gNB and UE support
|
||||
- E1 Bearer Context Modification Request
|
||||
- E1 Bearer Context Modification Response
|
||||
- Interface with RRC and PDCP
|
||||
- One CU-CP can handle multiple CU-UPs
|
||||
|
||||
## gNB GTP-U
|
||||
|
||||
|
||||
+29
-29
@@ -1,58 +1,58 @@
|
||||
The OpenAirInterface software can be obtained from our gitLab
|
||||
server. You will need a git client to get the sources. The repository
|
||||
is currently used for main developments.
|
||||
The OpenAirInterface software can be obtained from our gitLab server. You will
|
||||
need a git client to get the sources. The repository is used for main
|
||||
developments.
|
||||
|
||||
# Prerequisites
|
||||
|
||||
You need to install git using the following commands:
|
||||
You need to install `git` using the following commands:
|
||||
|
||||
```shell
|
||||
sudo apt-get update
|
||||
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)
|
||||
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
|
||||
git config --global user.name "Your Name"
|
||||
git config --global user.email "Your email address"
|
||||
```
|
||||
|
||||
## In order to clone the Git repository (for OAI Users without login to gitlab server)
|
||||
|
||||
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).
|
||||
More information can be found in [the contributing page](../CONTRIBUTING.md).
|
||||
|
||||
# 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.
|
||||
`master`: contains a stable version of 4G, and will be updated in the future with 5G.
|
||||
- `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.**
|
||||
- `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:
|
||||
|
||||
- On `master` branch: **v1.`x`.`y`** where
|
||||
* `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 `master` branch: **v`x`.`y`.`z`**
|
||||
- On `develop` branch **`yyyy`.w`xx`**
|
||||
* `yyyy` is the calendar 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
@@ -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/)
|
||||
~BUILD-ONLY ~4G-LTE ~5G-NR
|
||||
- orion: Cross-compilation from Intel to ARM
|
||||
- base image from `Dockerfile.base.ubuntu20.cross-arm64`
|
||||
- build image from `Dockerfile.build.ubuntu20.cross-arm64` (no target images)
|
||||
- base image from `Dockerfile.base.ubuntu22.cross-arm64`
|
||||
- build image from `Dockerfile.build.ubuntu22.cross-arm64` (no target images)
|
||||
- [RAN-cppcheck](https://jenkins-oai.eurecom.fr/job/RAN-cppcheck/)
|
||||
~BUILD-ONLY ~4G-LTE ~5G-NR
|
||||
- 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/)
|
||||
~BUILD-ONLY ~4G-LTE ~5G-NR
|
||||
- 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!)
|
||||
- base image from `Dockerfile.base.ubuntu20`
|
||||
- build image from `Dockerfile.build.ubuntu20`, followed by
|
||||
- target image from `Dockerfile.eNB.ubuntu20`
|
||||
- target image from `Dockerfile.gNB.ubuntu20`
|
||||
- target image from `Dockerfile.nr-cuup.ubuntu20`
|
||||
- target image from `Dockerfile.nrUE.ubuntu20`
|
||||
- target image from `Dockerfile.lteUE.ubuntu20`
|
||||
- target image from `Dockerfile.lteRU.ubuntu20`
|
||||
- build unit tests from `ci-scripts/docker/Dockerfile.unittest.ubuntu20`, and run them
|
||||
- obelix: Ubuntu 22 image build using docker (Note: builds U22 images while pipeline is named U18!)
|
||||
- base image from `Dockerfile.base.ubuntu22`
|
||||
- build image from `Dockerfile.build.ubuntu22`, followed by
|
||||
- target image from `Dockerfile.eNB.ubuntu22`
|
||||
- target image from `Dockerfile.gNB.ubuntu22`
|
||||
- target image from `Dockerfile.nr-cuup.ubuntu22`
|
||||
- target image from `Dockerfile.nrUE.ubuntu22`
|
||||
- target image from `Dockerfile.lteUE.ubuntu22`
|
||||
- target image from `Dockerfile.lteRU.ubuntu22`
|
||||
- build unit tests from `ci-scripts/docker/Dockerfile.unittest.ubuntu22`, and run them
|
||||
|
||||
#### Image Test pipelines
|
||||
|
||||
|
||||
+19
-15
@@ -5,7 +5,7 @@
|
||||
|
||||
## Environment
|
||||
|
||||
- OS: ubuntu 20.04
|
||||
- OS: ubuntu 22.04
|
||||
|
||||
### Set up the environment
|
||||
|
||||
@@ -15,21 +15,21 @@ Set up for install the package for aarch64.
|
||||
sudo dpkg --add-architecture arm64
|
||||
|
||||
echo -e \
|
||||
"deb [arch=arm64] http://ports.ubuntu.com/ focal main restricted\n"\
|
||||
"deb [arch=arm64] http://ports.ubuntu.com/ focal-updates main restricted\n"\
|
||||
"deb [arch=arm64] http://ports.ubuntu.com/ focal universe\n"\
|
||||
"deb [arch=arm64] http://ports.ubuntu.com/ focal-updates universe\n"\
|
||||
"deb [arch=arm64] http://ports.ubuntu.com/ focal multiverse\n"\
|
||||
"deb [arch=arm64] http://ports.ubuntu.com/ focal-updates multiverse\n"\
|
||||
"deb [arch=arm64] http://ports.ubuntu.com/ focal-backports main restricted universe multiverse"\
|
||||
"deb [arch=arm64] http://ports.ubuntu.com/ jammy main restricted\n"\
|
||||
"deb [arch=arm64] http://ports.ubuntu.com/ jammy-updates main restricted\n"\
|
||||
"deb [arch=arm64] http://ports.ubuntu.com/ jammy universe\n"\
|
||||
"deb [arch=arm64] http://ports.ubuntu.com/ jammy-updates universe\n"\
|
||||
"deb [arch=arm64] http://ports.ubuntu.com/ jammy multiverse\n"\
|
||||
"deb [arch=arm64] http://ports.ubuntu.com/ jammy-updates multiverse\n"\
|
||||
"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 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 apt update
|
||||
sudo apt install -y gcc-9-aarch64-linux-gnu \
|
||||
g++-9-aarch64-linux-gnu
|
||||
sudo apt install -y gcc-11-aarch64-linux-gnu \
|
||||
g++-11-aarch64-linux-gnu
|
||||
|
||||
sudo apt-get install -y \
|
||||
libatlas-base-dev:arm64 \
|
||||
@@ -46,11 +46,15 @@ sudo apt-get install -y \
|
||||
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 required packages
|
||||
|
||||
Use the host compiler to install some dependencies.
|
||||
Use the host compiler to install its dependencies.
|
||||
|
||||
```shell
|
||||
cd cmake_targets
|
||||
@@ -85,9 +89,9 @@ be defined in order to tell cmake where the host tools have been built.
|
||||
|
||||
```shell
|
||||
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
|
||||
make -j`nproc` lte-softmodem nr-softmodem nr-cuup oairu lte-uesoftmodem nr-uesoftmodem
|
||||
make -j`nproc` params_libconfig coding rfsimulator
|
||||
ninja -j`nproc` dlsim ulsim ldpctest polartest smallblocktest nr_pbchsim nr_dlschsim nr_ulschsim nr_dlsim nr_ulsim nr_pucchsim nr_prachsim
|
||||
ninja -j`nproc` lte-softmodem nr-softmodem nr-cuup oairu lte-uesoftmodem nr-uesoftmodem
|
||||
ninja -j`nproc` params_libconfig coding rfsimulator
|
||||
```
|
||||
|
||||
@@ -21,12 +21,12 @@
|
||||
#---------------------------------------------------------------------
|
||||
#
|
||||
# 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
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
ENV TZ=Europe/Paris
|
||||
@@ -34,6 +34,7 @@ ENV BUILD_UHD_FROM_SOURCE=True
|
||||
ENV UHD_VERSION=4.4.0.0
|
||||
|
||||
#install developers pkg/repo
|
||||
#use gcc-12 to avoid problems of default gcc-11 in FlexRIC
|
||||
RUN apt-get update && \
|
||||
DEBIAN_FRONTEND=noninteractive apt-get upgrade --yes && \
|
||||
DEBIAN_FRONTEND=noninteractive apt-get install --yes \
|
||||
@@ -41,9 +42,12 @@ RUN apt-get update && \
|
||||
build-essential \
|
||||
psmisc \
|
||||
git \
|
||||
gcc-12 \
|
||||
g++-12 \
|
||||
xxd \
|
||||
# python3-pip for conf template generation
|
||||
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
|
||||
|
||||
# Add "Tini - A tiny but valid init for containers", https://github.com/krallin/tini
|
||||
+12
-12
@@ -21,12 +21,12 @@
|
||||
#---------------------------------------------------------------------
|
||||
#
|
||||
# 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.
|
||||
FROM ubuntu:focal AS ran-base
|
||||
# Very important, the jammy image shall not be using mirrors. A lot of them do NOT support ARM64.
|
||||
FROM ubuntu:jammy AS ran-base
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
ENV TZ=Europe/Paris
|
||||
# Specifying a working version of SIMDE for ARM:
|
||||
@@ -37,13 +37,13 @@ RUN apt-get update && \
|
||||
DEBIAN_FRONTEND=noninteractive apt-get upgrade --yes && \
|
||||
#enabling arm64 architecture
|
||||
dpkg --add-architecture arm64 && \
|
||||
echo "deb [arch=arm64] http://ports.ubuntu.com/ focal main restricted\n" \
|
||||
"deb [arch=arm64] http://ports.ubuntu.com/ focal-updates main restricted\n" \
|
||||
"deb [arch=arm64] http://ports.ubuntu.com/ focal universe\n" \
|
||||
"deb [arch=arm64] http://ports.ubuntu.com/ focal-updates universe\n" \
|
||||
"deb [arch=arm64] http://ports.ubuntu.com/ focal multiverse\n" \
|
||||
"deb [arch=arm64] http://ports.ubuntu.com/ focal-updates multiverse\n" \
|
||||
"deb [arch=arm64] http://ports.ubuntu.com/ focal-backports main restricted universe multiverse" \
|
||||
echo "deb [arch=arm64] http://ports.ubuntu.com/ jammy main restricted\n" \
|
||||
"deb [arch=arm64] http://ports.ubuntu.com/ jammy-updates main restricted\n" \
|
||||
"deb [arch=arm64] http://ports.ubuntu.com/ jammy universe\n" \
|
||||
"deb [arch=arm64] http://ports.ubuntu.com/ jammy-updates universe\n" \
|
||||
"deb [arch=arm64] http://ports.ubuntu.com/ jammy multiverse\n" \
|
||||
"deb [arch=arm64] http://ports.ubuntu.com/ jammy-updates multiverse\n" \
|
||||
"deb [arch=arm64] http://ports.ubuntu.com/ jammy-backports main restricted universe multiverse" \
|
||||
| tee /etc/apt/sources.list.d/arm-cross-compile-sources.list && \
|
||||
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 && \
|
||||
@@ -69,8 +69,8 @@ RUN apt-get update && \
|
||||
zlib1g-dev:arm64 \
|
||||
# cross build libs and compilers
|
||||
libc6-dev-i386 \
|
||||
gcc-9-aarch64-linux-gnu \
|
||||
g++-9-aarch64-linux-gnu && \
|
||||
gcc-11-aarch64-linux-gnu \
|
||||
g++-11-aarch64-linux-gnu && \
|
||||
apt-get clean
|
||||
|
||||
# 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
|
||||
# Valid for Ubuntu 20.04
|
||||
# Valid for Ubuntu 22.04
|
||||
#
|
||||
#---------------------------------------------------------------------
|
||||
|
||||
@@ -42,6 +42,6 @@ RUN /bin/sh oaienv && \
|
||||
-w USRP -t Ethernet \
|
||||
--build-e2 --cmake-opt -DXAPP_MULTILANGUAGE=OFF \
|
||||
--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
|
||||
ldd ran_build/build/nr-softmodem
|
||||
+3
-3
@@ -21,7 +21,7 @@
|
||||
#---------------------------------------------------------------------
|
||||
#
|
||||
# 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; \
|
||||
# displaying errors and warnings
|
||||
egrep -A3 "warning:|error:" ../../log/all.txt || true && \
|
||||
# will fail only for errors
|
||||
egrep -L "error:" ../../log/all.txt && \
|
||||
# will fail only if string "errors:" is found
|
||||
egrep "error:" -vqz ../../log/all.txt && \
|
||||
echo "====== End of log for cross-build executables ======"
|
||||
@@ -21,7 +21,7 @@
|
||||
#---------------------------------------------------------------------
|
||||
#
|
||||
# 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
|
||||
FROM ubuntu:focal as oai-enb
|
||||
FROM ubuntu:jammy as oai-enb
|
||||
ARG BUILD_OPTION
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
ENV TZ=Europe/Paris
|
||||
@@ -42,38 +42,50 @@ RUN apt-get update && \
|
||||
software-properties-common \
|
||||
procps \
|
||||
libsctp1 \
|
||||
libboost-chrono1.71.0 \
|
||||
libboost-date-time1.71.0 \
|
||||
libboost-filesystem1.71.0 \
|
||||
libboost-regex1.71.0 \
|
||||
libboost-serialization1.71.0 \
|
||||
libboost-thread1.71.0 \
|
||||
libboost-system1.71.0 \
|
||||
libboost-program-options1.71.0 \
|
||||
libboost-chrono1.74.0 \
|
||||
libboost-date-time1.74.0 \
|
||||
libboost-filesystem1.74.0 \
|
||||
libboost-regex1.74.0 \
|
||||
libboost-serialization1.74.0 \
|
||||
libboost-thread1.74.0 \
|
||||
libboost-system1.74.0 \
|
||||
libboost-program-options1.74.0 \
|
||||
tzdata \
|
||||
libblas3 \
|
||||
libatlas3-base \
|
||||
libconfig9 \
|
||||
openssl \
|
||||
net-tools \
|
||||
iperf \
|
||||
wget \
|
||||
iperf3 \
|
||||
iputils-ping \
|
||||
iproute2 \
|
||||
gdb \
|
||||
python \
|
||||
python3 \
|
||||
python3-six \
|
||||
python3-requests \
|
||||
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
|
||||
/bin/bash -c 'if [[ "$BUILD_OPTION" = "--sanitize" ]]; then DEBIAN_FRONTEND=noninteractive apt-get install --yes \
|
||||
libasan5 \
|
||||
#libasan5 \ # see below
|
||||
libubsan1 \
|
||||
liblapacke; fi' && \
|
||||
apt-get clean -y && \
|
||||
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
|
||||
COPY --from=enb-build \
|
||||
/oai-ran/cmake_targets/ran_build/build/lte-softmodem ./
|
||||
@@ -58,7 +58,7 @@ RUN /bin/sh oaienv && \
|
||||
|
||||
|
||||
#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 TZ=Europe
|
||||
|
||||
+1
-1
@@ -58,7 +58,7 @@ RUN /bin/sh oaienv && \
|
||||
|
||||
|
||||
#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 TZ=Europe
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
#---------------------------------------------------------------------
|
||||
#
|
||||
# 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
|
||||
FROM ubuntu:focal as oai-gnb
|
||||
FROM ubuntu:jammy as oai-gnb
|
||||
ARG BUILD_OPTION
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
ENV TZ=Europe/Paris
|
||||
@@ -42,14 +42,14 @@ RUN apt-get update && \
|
||||
software-properties-common \
|
||||
procps \
|
||||
libsctp1 \
|
||||
libboost-chrono1.71.0 \
|
||||
libboost-date-time1.71.0 \
|
||||
libboost-filesystem1.71.0 \
|
||||
libboost-regex1.71.0 \
|
||||
libboost-serialization1.71.0 \
|
||||
libboost-thread1.71.0 \
|
||||
libboost-system1.71.0 \
|
||||
libboost-program-options1.71.0 \
|
||||
libboost-chrono1.74.0 \
|
||||
libboost-date-time1.74.0 \
|
||||
libboost-filesystem1.74.0 \
|
||||
libboost-regex1.74.0 \
|
||||
libboost-serialization1.74.0 \
|
||||
libboost-thread1.74.0 \
|
||||
libboost-system1.74.0 \
|
||||
libboost-program-options1.74.0 \
|
||||
tzdata \
|
||||
libblas3 \
|
||||
libatlas3-base \
|
||||
@@ -61,19 +61,24 @@ RUN apt-get update && \
|
||||
iproute2 \
|
||||
iputils-ping \
|
||||
gdb \
|
||||
python \
|
||||
python3 \
|
||||
python3-six \
|
||||
python3-requests \
|
||||
libusb-1.0-0 && \
|
||||
# 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 \
|
||||
libasan5 \
|
||||
#libasan5 \ # see below
|
||||
libubsan1 \
|
||||
liblapacke; fi' && \
|
||||
apt-get clean -y && \
|
||||
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
|
||||
COPY --from=gnb-build \
|
||||
/oai-ran/cmake_targets/ran_build/build/nr-softmodem ./
|
||||
@@ -21,7 +21,7 @@
|
||||
#---------------------------------------------------------------------
|
||||
#
|
||||
# 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
|
||||
FROM ubuntu:focal as oai-lte-ru
|
||||
FROM ubuntu:jammy as oai-lte-ru
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
ENV TZ=Europe/Paris
|
||||
|
||||
@@ -46,7 +46,6 @@ RUN apt-get update && \
|
||||
libconfig9 \
|
||||
net-tools \
|
||||
gdb \
|
||||
python \
|
||||
python3 \
|
||||
python3-six \
|
||||
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/lib/x86_64-linux-gnu/libboost_chrono.so.1.71.0 \
|
||||
/usr/lib/x86_64-linux-gnu/libboost_date_time.so.1.71.0 \
|
||||
/usr/lib/x86_64-linux-gnu/libboost_filesystem.so.1.71.0 \
|
||||
/usr/lib/x86_64-linux-gnu/libboost_regex.so.1.71.0 \
|
||||
/usr/lib/x86_64-linux-gnu/libboost_serialization.so.1.71.0 \
|
||||
/usr/lib/x86_64-linux-gnu/libboost_thread.so.1.71.0 \
|
||||
/usr/lib/x86_64-linux-gnu/libboost_system.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.74.0 \
|
||||
/usr/lib/x86_64-linux-gnu/libboost_filesystem.so.1.74.0 \
|
||||
/usr/lib/x86_64-linux-gnu/libboost_regex.so.1.74.0 \
|
||||
/usr/lib/x86_64-linux-gnu/libboost_serialization.so.1.74.0 \
|
||||
/usr/lib/x86_64-linux-gnu/libboost_thread.so.1.74.0 \
|
||||
/usr/lib/x86_64-linux-gnu/libboost_system.so.1.74.0 \
|
||||
/usr/lib/x86_64-linux-gnu/
|
||||
|
||||
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
|
||||
FROM ubuntu:focal as oai-lte-ue
|
||||
FROM ubuntu:jammy as oai-lte-ue
|
||||
ARG BUILD_OPTION
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
ENV TZ=Europe/Paris
|
||||
@@ -42,38 +42,50 @@ RUN apt-get update && \
|
||||
software-properties-common \
|
||||
procps \
|
||||
libsctp1 \
|
||||
libboost-chrono1.71.0 \
|
||||
libboost-date-time1.71.0 \
|
||||
libboost-filesystem1.71.0 \
|
||||
libboost-regex1.71.0 \
|
||||
libboost-serialization1.71.0 \
|
||||
libboost-thread1.71.0 \
|
||||
libboost-system1.71.0 \
|
||||
libboost-program-options1.71.0 \
|
||||
libboost-chrono1.74.0 \
|
||||
libboost-date-time1.74.0 \
|
||||
libboost-filesystem1.74.0 \
|
||||
libboost-regex1.74.0 \
|
||||
libboost-serialization1.74.0 \
|
||||
libboost-thread1.74.0 \
|
||||
libboost-system1.74.0 \
|
||||
libboost-program-options1.74.0 \
|
||||
tzdata \
|
||||
liblapacke \
|
||||
libatlas3-base \
|
||||
libconfig9 \
|
||||
openssl \
|
||||
net-tools \
|
||||
python \
|
||||
python3 \
|
||||
python3-six \
|
||||
python3-requests \
|
||||
libpython3.8 \
|
||||
libpython3.10 \
|
||||
libusb-1.0-0 \
|
||||
iputils-ping \
|
||||
iproute2 \
|
||||
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
|
||||
/bin/bash -c 'if [[ "$BUILD_OPTION" = "--sanitize" ]]; then DEBIAN_FRONTEND=noninteractive apt-get install --yes \
|
||||
libasan5 \
|
||||
#libasan5 \ # see below
|
||||
libubsan1 \
|
||||
liblapacke; fi' && \
|
||||
apt-get clean -y && \
|
||||
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
|
||||
COPY --from=lte-ue-build \
|
||||
/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 ubuntu:focal as oai-nr-cuup
|
||||
FROM ubuntu:jammy as oai-nr-cuup
|
||||
ARG BUILD_OPTION
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
ENV TZ=Europe
|
||||
@@ -45,11 +45,17 @@ RUN apt-get update && \
|
||||
openssl && \
|
||||
# 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 \
|
||||
libasan5 \
|
||||
#libasan5 \ see below
|
||||
libubsan1 \
|
||||
liblapacke; fi' && \
|
||||
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
|
||||
COPY --from=gnb-build \
|
||||
/oai-ran/cmake_targets/ran_build/build/nr-cuup \
|
||||
@@ -21,7 +21,7 @@
|
||||
#---------------------------------------------------------------------
|
||||
#
|
||||
# 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
|
||||
FROM ubuntu:focal as oai-nr-ue
|
||||
FROM ubuntu:jammy as oai-nr-ue
|
||||
ARG BUILD_OPTION
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
ENV TZ=Europe/Paris
|
||||
@@ -42,14 +42,14 @@ RUN apt-get update && \
|
||||
software-properties-common \
|
||||
procps \
|
||||
libsctp1 \
|
||||
libboost-chrono1.71.0 \
|
||||
libboost-date-time1.71.0 \
|
||||
libboost-filesystem1.71.0 \
|
||||
libboost-regex1.71.0 \
|
||||
libboost-serialization1.71.0 \
|
||||
libboost-thread1.71.0 \
|
||||
libboost-system1.71.0 \
|
||||
libboost-program-options1.71.0 \
|
||||
libboost-chrono1.74.0 \
|
||||
libboost-date-time1.74.0 \
|
||||
libboost-filesystem1.74.0 \
|
||||
libboost-regex1.74.0 \
|
||||
libboost-serialization1.74.0 \
|
||||
libboost-thread1.74.0 \
|
||||
libboost-system1.74.0 \
|
||||
libboost-program-options1.74.0 \
|
||||
tzdata \
|
||||
liblapacke \
|
||||
libatlas3-base \
|
||||
@@ -57,7 +57,6 @@ RUN apt-get update && \
|
||||
openssl \
|
||||
net-tools \
|
||||
gdb \
|
||||
python \
|
||||
python3 \
|
||||
python3-six \
|
||||
python3-requests \
|
||||
@@ -68,11 +67,17 @@ RUN apt-get update && \
|
||||
iperf && \
|
||||
# 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 \
|
||||
libasan5 \
|
||||
#libasan5 \ # see below
|
||||
libubsan1; fi' && \
|
||||
apt-get clean -y && \
|
||||
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
|
||||
COPY --from=nr-ue-build \
|
||||
/oai-ran/cmake_targets/ran_build/build/nr-uesoftmodem \
|
||||
+9
-9
@@ -75,18 +75,18 @@ Targets can be:
|
||||
The currently-supported OS are:
|
||||
|
||||
- `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
|
||||
|
||||
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 ##
|
||||
|
||||
* `git` installed
|
||||
* `docker-ce` installed
|
||||
* Pulling `ubuntu:focal` from DockerHub
|
||||
* Pulling `ubuntu:jammy` from DockerHub
|
||||
|
||||
## 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
|
||||
cd openairinterface5g
|
||||
git checkout develop
|
||||
docker build --target ran-base --tag ran-base:latest --file docker/Dockerfile.base.ubuntu20 .
|
||||
docker build --target ran-build --tag ran-build:latest --file docker/Dockerfile.build.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.ubuntu22 .
|
||||
```
|
||||
|
||||
After building both:
|
||||
@@ -115,12 +115,12 @@ Note that the steps are identical for `rocky-linux`.
|
||||
|
||||
### 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.
|
||||
|
||||
```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:
|
||||
@@ -146,7 +146,7 @@ You can also use this docker build arguments to pass any available option(s) on
|
||||
For example, the eNB:
|
||||
|
||||
```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:
|
||||
@@ -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:
|
||||
|
||||
```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.
|
||||
|
||||
@@ -79,7 +79,6 @@
|
||||
#include "common/utils/LOG/log.h"
|
||||
#include "UTIL/OTG/otg_tx.h"
|
||||
#include "UTIL/OTG/otg_externs.h"
|
||||
#include "UTIL/MATH/oml.h"
|
||||
#include "common/utils/LOG/vcd_signal_dumper.h"
|
||||
#include "UTIL/OPT/opt.h"
|
||||
#include "enb_config.h"
|
||||
|
||||
@@ -69,7 +69,7 @@ unsigned short config_frames[4] = {2,9,11,13};
|
||||
#include "common/utils/LOG/log.h"
|
||||
#include "UTIL/OTG/otg_tx.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 "UTIL/OPT/opt.h"
|
||||
#include "enb_config.h"
|
||||
|
||||
@@ -56,7 +56,6 @@
|
||||
#include "nfapi/oai_integration/vendor_ext.h"
|
||||
#include "UTIL/OTG/otg_tx.h"
|
||||
#include "UTIL/OTG/otg_externs.h"
|
||||
#include "UTIL/MATH/oml.h"
|
||||
#include "common/utils/LOG/vcd_signal_dumper.h"
|
||||
#include "UTIL/OPT/opt.h"
|
||||
#include "lte-softmodem.h"
|
||||
|
||||
@@ -66,7 +66,7 @@
|
||||
#include "nfapi/oai_integration/vendor_ext.h"
|
||||
#include "UTIL/OTG/otg_tx.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 "UTIL/OPT/opt.h"
|
||||
|
||||
|
||||
@@ -71,7 +71,6 @@
|
||||
#include "common/utils/LOG/log.h"
|
||||
#include "UTIL/OTG/otg_tx.h"
|
||||
#include "UTIL/OTG/otg_externs.h"
|
||||
#include "UTIL/MATH/oml.h"
|
||||
#include "common/utils/LOG/vcd_signal_dumper.h"
|
||||
#include "UTIL/OPT/opt.h"
|
||||
#include "gnb_paramdef.h"
|
||||
|
||||
@@ -1074,7 +1074,11 @@ static int32_t aerial_pack_tx_data_request(void *pMessageBuf,
|
||||
for (; k < total_number_of_tlvs; ++k) {
|
||||
if (value->TLVs[k].length > 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;
|
||||
}
|
||||
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 {
|
||||
// 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;
|
||||
}
|
||||
}
|
||||
@@ -1109,7 +1117,7 @@ static int32_t aerial_pack_tx_data_request(void *pMessageBuf,
|
||||
uintptr_t msgEnd = (uintptr_t)pPacketBodyField;
|
||||
uint32_t packedMsgLen = msgEnd - msgHead;
|
||||
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);
|
||||
return 0;
|
||||
} else {
|
||||
@@ -1123,17 +1131,6 @@ static int32_t aerial_pack_tx_data_request(void *pMessageBuf,
|
||||
if (!push32(packedMsgLen, &pPackedLengthField, pPackMessageEnd))
|
||||
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);
|
||||
}
|
||||
|
||||
@@ -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];
|
||||
// Check if TX_DATA request, if true, need to pack to data_buf
|
||||
if (header->message_id
|
||||
== NFAPI_NR_PHY_MSG_TYPE_TX_DATA_REQUEST) {
|
||||
uint8_t FAPI_data_buffer[1024 * 64];
|
||||
if (header->message_id == NFAPI_NR_PHY_MSG_TYPE_TX_DATA_REQUEST) {
|
||||
nfapi_nr_tx_data_request_t *pNfapiMsg = (nfapi_nr_tx_data_request_t *)header;
|
||||
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;
|
||||
int32_t len_FAPI = aerial_pack_tx_data_request(header,
|
||||
FAPI_buffer,
|
||||
FAPI_data_buffer,
|
||||
sizeof(FAPI_buffer),
|
||||
sizeof(FAPI_data_buffer),
|
||||
&vnf_p7->_public.codec_config,
|
||||
&data_len);
|
||||
if (len_FAPI <=0) {
|
||||
LOG_E(NFAPI_VNF,"Problem packing TX_DATA_request\n");
|
||||
FAPI_buffer,
|
||||
FAPI_data_buffer,
|
||||
sizeof(FAPI_buffer),
|
||||
sizeof(FAPI_data_buffer),
|
||||
&vnf_p7->_public.codec_config,
|
||||
&data_len);
|
||||
if (len_FAPI <= 0) {
|
||||
LOG_E(NFAPI_VNF, "Problem packing TX_DATA_request\n");
|
||||
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 {
|
||||
// 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);
|
||||
|
||||
@@ -26,10 +26,11 @@
|
||||
// Extension to the generic structures for single tlv values
|
||||
|
||||
typedef struct {
|
||||
/// Value: 0 -> 1, 0: Payload is carried directly in the value field, 1: Pointer to payload is in the value field
|
||||
uint16_t tag;
|
||||
/// Length of the actual payload in bytes, without the padding bytes Value: 0 → 65535
|
||||
uint16_t length;
|
||||
/// Value: 0 -> 1, 0: Payload is carried directly in the value field, 1: Pointer to payload is in the value field
|
||||
uint16_t tag;
|
||||
/// Length of the actual payload in bytes, without the padding bytes Value: 0 → 0xFFFFFFFF
|
||||
/// Note: This change to uint32_t is a deviation from version 10.02 of the SCF222 standard
|
||||
uint32_t length;
|
||||
union {
|
||||
uint32_t *ptr;
|
||||
uint32_t direct[38016];
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
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 (!(push16(value->PDU_length, ppWritePackedMsg, end) && push16(value->PDU_index, ppWritePackedMsg, end)
|
||||
if (!(push32(value->PDU_length, ppWritePackedMsg, end) && push16(value->PDU_index, ppWritePackedMsg, end)
|
||||
&& push32(value->num_TLV, ppWritePackedMsg, end)))
|
||||
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;
|
||||
|
||||
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;
|
||||
|
||||
switch (value->TLVs[i].tag) {
|
||||
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);
|
||||
return 0;
|
||||
}
|
||||
@@ -2039,7 +2042,11 @@ static uint8_t pack_tx_data_pdu_list_value(void *tlv, uint8_t **ppWritePackedMsg
|
||||
}
|
||||
|
||||
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);
|
||||
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) {
|
||||
nfapi_nr_pdu_t *pNfapiMsg = (nfapi_nr_pdu_t *)msg;
|
||||
|
||||
if(!(pull16(ppReadPackedMsg, (uint16_t *)&pNfapiMsg->PDU_length, end) &&
|
||||
pull16(ppReadPackedMsg, &pNfapiMsg->PDU_index, end) &&
|
||||
pull32(ppReadPackedMsg, &pNfapiMsg->num_TLV, end)
|
||||
))
|
||||
if (!(pull32(ppReadPackedMsg, &pNfapiMsg->PDU_length, end) && pull16(ppReadPackedMsg, &pNfapiMsg->PDU_index, end)
|
||||
&& pull32(ppReadPackedMsg, &pNfapiMsg->num_TLV, end)))
|
||||
return 0;
|
||||
|
||||
uint16_t i = 0;
|
||||
uint16_t total_number_of_tlvs = pNfapiMsg->num_TLV;
|
||||
|
||||
for(; i < total_number_of_tlvs; ++i) {
|
||||
if (!(pull16(ppReadPackedMsg, &pNfapiMsg->TLVs[i].tag, end) &&
|
||||
pull16(ppReadPackedMsg, &pNfapiMsg->TLVs[i].length, end)))
|
||||
if (!(pull16(ppReadPackedMsg, &pNfapiMsg->TLVs[i].tag, end) && pull32(ppReadPackedMsg, &pNfapiMsg->TLVs[i].length, end)))
|
||||
return 0;
|
||||
|
||||
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: {
|
||||
if (!pullarray32(ppReadPackedMsg,pNfapiMsg->TLVs[i].value.ptr,
|
||||
pNfapiMsg->TLVs[i].length,
|
||||
pNfapiMsg->TLVs[i].length, end))
|
||||
if (!pullarray32(ppReadPackedMsg,
|
||||
pNfapiMsg->TLVs[i].value.ptr,
|
||||
(pNfapiMsg->TLVs[i].length + 3) / 4,
|
||||
(pNfapiMsg->TLVs[i].length + 3) / 4,
|
||||
end))
|
||||
return 0;
|
||||
|
||||
break;
|
||||
|
||||
@@ -430,11 +430,11 @@ int main(int argc, char *argv[])
|
||||
}
|
||||
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' */
|
||||
if (c == 1 || c == '-')
|
||||
if (c == 1 || c == '-' || c == 'O')
|
||||
continue;
|
||||
|
||||
printf("handling optarg %c\n",c);
|
||||
|
||||
@@ -38,11 +38,11 @@ int main(int argc, char *argv[])
|
||||
}
|
||||
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' */
|
||||
if (arguments == 1 || arguments == '-')
|
||||
if (arguments == 1 || arguments == '-' || arguments == 'O')
|
||||
continue;
|
||||
|
||||
printf("handling optarg %c\n",arguments);
|
||||
|
||||
@@ -32,11 +32,11 @@ int main(int argc, char *argv[])
|
||||
}
|
||||
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' */
|
||||
if (arguments == 1 || arguments == '-')
|
||||
if (arguments == 1 || arguments == '-' || arguments == 'O')
|
||||
continue;
|
||||
|
||||
printf("handling optarg %c\n",arguments);
|
||||
|
||||
@@ -11,7 +11,12 @@ data storage. */
|
||||
#include<math.h>
|
||||
#include<complex.h>
|
||||
#include <stdlib.h>
|
||||
#include <linux/version.h>
|
||||
#if defined RHEL_RELEASE_CODE
|
||||
#include <cblas/cblas.h>
|
||||
#else
|
||||
#include <cblas.h>
|
||||
#endif
|
||||
#include <string.h>
|
||||
#include <linux/version.h>
|
||||
#include <lapacke_utils.h>
|
||||
@@ -22,8 +27,8 @@ data storage. */
|
||||
void transpose (int N, float complex *A, float complex *Result)
|
||||
{
|
||||
// COnputes C := alpha*op(A)*op(B) + beta*C,
|
||||
enum CBLAS_TRANSPOSE transa = CblasTrans;
|
||||
enum CBLAS_TRANSPOSE transb = CblasNoTrans;
|
||||
CBLAS_TRANSPOSE transa = CblasTrans;
|
||||
CBLAS_TRANSPOSE transb = CblasNoTrans;
|
||||
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_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)
|
||||
{
|
||||
// Computes C := alpha*op(A)*op(B) + beta*C,
|
||||
enum CBLAS_TRANSPOSE transa = CblasConjTrans;
|
||||
enum CBLAS_TRANSPOSE transb = CblasNoTrans;
|
||||
CBLAS_TRANSPOSE transa = CblasConjTrans;
|
||||
CBLAS_TRANSPOSE transb = CblasNoTrans;
|
||||
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_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)
|
||||
{
|
||||
//C := alpha*op(A)*op(B) + beta*C,
|
||||
enum CBLAS_TRANSPOSE transa = CblasConjTrans;
|
||||
enum CBLAS_TRANSPOSE transb = CblasNoTrans;
|
||||
CBLAS_TRANSPOSE transa = CblasConjTrans;
|
||||
CBLAS_TRANSPOSE transb = CblasNoTrans;
|
||||
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_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)
|
||||
{
|
||||
//C := alpha*op(A)*op(B) + beta*C,
|
||||
enum CBLAS_TRANSPOSE transa = CblasNoTrans;
|
||||
enum CBLAS_TRANSPOSE transb = CblasConjTrans;
|
||||
CBLAS_TRANSPOSE transa = CblasNoTrans;
|
||||
CBLAS_TRANSPOSE transb = CblasConjTrans;
|
||||
int k = N; //number of columns in op(A) and rows in op(B),k
|
||||
float complex alpha = 1.0+I*0;
|
||||
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 ){
|
||||
enum CBLAS_TRANSPOSE transa = CblasNoTrans;
|
||||
enum CBLAS_TRANSPOSE transb = CblasNoTrans;
|
||||
CBLAS_TRANSPOSE transa = CblasNoTrans;
|
||||
CBLAS_TRANSPOSE transb = CblasNoTrans;
|
||||
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_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 ){
|
||||
enum CBLAS_TRANSPOSE transa = CblasNoTrans;
|
||||
enum CBLAS_TRANSPOSE transb = CblasNoTrans;
|
||||
CBLAS_TRANSPOSE transa = CblasNoTrans;
|
||||
CBLAS_TRANSPOSE transb = CblasNoTrans;
|
||||
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_opA = col_M0; //number of columns in op(A) and rows in op(B)
|
||||
|
||||
@@ -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 },
|
||||
{ "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 },
|
||||
{ "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 },
|
||||
{ "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 },
|
||||
|
||||
@@ -438,7 +438,7 @@ int main(int argc, char **argv) {
|
||||
{ "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 },
|
||||
{ "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 },
|
||||
{ "help", "display help and exit", PARAMFLAG_BOOL, .iptr=&help, .defintval=0, TYPE_INT, 0 },
|
||||
{ "", "",0, .iptr=NULL, .defintval=0, TYPE_INT, 0 },
|
||||
|
||||
@@ -146,11 +146,11 @@ int main(int argc, char **argv)
|
||||
// logInit();
|
||||
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 */
|
||||
/* 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;
|
||||
|
||||
printf("handling optarg %c\n",c);
|
||||
|
||||
@@ -336,11 +336,11 @@ int main(int argc, char **argv)
|
||||
|
||||
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' */
|
||||
if (c == 1 || c == '-')
|
||||
if (c == 1 || c == '-' || c == 'O')
|
||||
continue;
|
||||
|
||||
printf("handling optarg %c\n",c);
|
||||
|
||||
@@ -244,15 +244,20 @@ int main(int argc, char **argv)
|
||||
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' */
|
||||
if (c == 1 || c == '-')
|
||||
if (c == 1 || c == '-' || c == 'O')
|
||||
continue;
|
||||
|
||||
printf("handling optarg %c\n",c);
|
||||
switch (c) {
|
||||
|
||||
case 'c':
|
||||
ssb_subcarrier_offset = atoi(optarg);
|
||||
break;
|
||||
|
||||
/*case 'f':
|
||||
write_output_file=1;
|
||||
output_fd = fopen(optarg,"w");
|
||||
@@ -349,10 +354,6 @@ int main(int argc, char **argv)
|
||||
Nid_cell = atoi(optarg);
|
||||
break;
|
||||
|
||||
case 'O':
|
||||
ssb_subcarrier_offset = atoi(optarg);
|
||||
break;
|
||||
|
||||
case 'o':
|
||||
cfo = atof(optarg);
|
||||
#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",
|
||||
argv[0]);
|
||||
//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("-d Use TDD\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 Nid_cell\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("-p Use extended prefix mode\n");
|
||||
printf("-P PBCH phase, allowed values 0-3\n");
|
||||
|
||||
@@ -164,11 +164,11 @@ int main(int argc, char **argv){
|
||||
|
||||
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' */
|
||||
if (c == 1 || c == '-')
|
||||
if (c == 1 || c == '-' || c == 'O')
|
||||
continue;
|
||||
|
||||
printf("handling optarg %c\n",c);
|
||||
|
||||
@@ -320,11 +320,11 @@ int main(int argc, char **argv)
|
||||
|
||||
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' */
|
||||
if (c == 1 || c == '-')
|
||||
if (c == 1 || c == '-' || c == 'O')
|
||||
continue;
|
||||
|
||||
printf("SIDELINK PSBCH SIM: handling optarg %c\n", c);
|
||||
|
||||
@@ -155,11 +155,11 @@ int main(int argc, char **argv)
|
||||
randominit(0);
|
||||
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' */
|
||||
if (c == 1 || c == '-')
|
||||
if (c == 1 || c == '-' || c == 'O')
|
||||
continue;
|
||||
|
||||
printf("handling optarg %c\n",c);
|
||||
|
||||
@@ -166,11 +166,11 @@ int main(int argc, char **argv)
|
||||
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, "--: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' */
|
||||
if (c == 1 || c == '-')
|
||||
if (c == 1 || c == '-' || c == 'O')
|
||||
continue;
|
||||
|
||||
printf("handling optarg %c\n",c);
|
||||
|
||||
@@ -223,11 +223,11 @@ int main(int argc, char *argv[])
|
||||
/* initialize the sin-cos table */
|
||||
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' */
|
||||
if (c == 1 || c == '-')
|
||||
if (c == 1 || c == '-' || c == 'O')
|
||||
continue;
|
||||
|
||||
printf("handling optarg %c\n",c);
|
||||
|
||||
+1
-1
Submodule openair2/E2AP/flexric updated: f1c08ed2b9...beabdd072c
@@ -5200,9 +5200,9 @@ bool supported_bw_comparison(int bw_mhz, NR_SupportedBandwidth_t *supported_BW,
|
||||
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
|
||||
pdu_length += (num_TLV * 4) + total_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 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);
|
||||
|
||||
|
||||
@@ -1353,7 +1353,7 @@ int nr_acknack_scheduling(gNB_MAC_INST *mac,
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
add_subdirectory(DS)
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
Algorithms and Data Structures in C for common usage
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
add_subdirectory(ALG_DS)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user