Merge branch 'integration_2023_w07' into 'develop'

integration_2023_w07

See merge request oai/openairinterface5g!1955

!1817 OAI LTE improvements
!1925 Avoid saturation in PUSCH for UL channel estimation
!1940 5G UE IMEISV 16 digits
!1944 fixes in limiting MCS and number of PRB while handling NR PHR
!1953 bugfix: length type too short
!1935 updating simulators docker-compose files for CN5G release v1.5
!1941 Dockerfile for aw2s RRUs on u18.04
!1956 Updated 5G L2sim tutorial
!1951 Conditional compilation of the T1 and CUDA offload libs
!1926 CI custom command
This commit is contained in:
Robert Schmidt
2023-02-20 08:36:09 +00:00
120 changed files with 2398 additions and 3165 deletions
+40 -60
View File
@@ -140,29 +140,6 @@ set (OPENAIR_BIN_DIR ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY})
project (OpenAirInterface) project (OpenAirInterface)
##############################################
# Base CUDA setting
##############################################
find_package(CUDA)
if (CUDA_FOUND)
message ("cuda include ${CUDA_INCLUDE_DIRS}")
message ("cuda library ${CUDA_LIBRARY_DIRS}")
add_definitions("-L/usr/local/cuda/lib64")
SET(CUDA_NVCC_FLAGS
"${CUDA_NVCC_FLAGS};-arch=sm_60;")
# Disable warnings for CUDA
SET(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS};-lpthread;-w;-O3;--default-stream;per-thread;-I/usr/local/cuda/inc;-L/usr/local/cuda/lib -lcutil;-rdc=true;-lcudadevrt")
SET(CUDA_VERBOSE_BUILD ON)
SET(CUDA_SEPARABLE_COMPILATION ON)
else (CUDA_FOUND)
message ("No CUDA tool installed")
endif ()
#################################################### ####################################################
# compilation flags # compilation flags
############################################# #############################################
@@ -618,26 +595,19 @@ target_link_libraries(benetel_5g PRIVATE asn1_nr_rrc asn1_lte_rrc)
# LDPC offload library # LDPC offload library
########################################################## ##########################################################
# there is no generic way to test for T1 Offload, it simply comes with the add_boolean_option(ENABLE_LDPC_T1 OFF "Build support for LDPC Offload to T1 library")
# shared object if (ENABLE_LDPC_T1)
if (EXISTS "/usr/local/lib64/librte_pmd_hpac_sdfec_pmd.so") pkg_check_modules(LIBDPDK_T1 REQUIRED libdpdk=20.05.0)
set(T1_OFFLOAD_FOUND TRUE) find_library(T1 NAMES rte_pmd_hpac_sdfec_pmd REQUIRED)
else() if (NOT T1)
set(T1_OFFLOAD_FOUND FALSE) message(FATAL_ERROR "Library rte_pmd_hpac_sdfec_pmd for T1 offload not found")
endif()
add_library(ldpc_t1 MODULE ${OPENAIR1_DIR}/PHY/CODING/nrLDPC_decoder/nrLDPC_decoder_offload.c)
set_target_properties(ldpc_t1 PROPERTIES COMPILE_FLAGS "-DALLOW_EXPERIMENTAL_API")
target_compile_options(ldpc_t1 PRIVATE ${LIBDPDK_T1_CFLAGS})
target_link_libraries(ldpc_t1 ${LIBDPDK_T1_LDFLAGS} ${T1})
endif() endif()
if(T1_OFFLOAD_FOUND)
message(STATUS "T1 Offload support detected")
set(ENV{PKG_CONFIG_PATH} "$ENV{PKG_CONFIG_PATH}:/usr/local/lib64/pkgconfig/")
pkg_search_module(LIBDPDK REQUIRED libdpdk=20.05.0)
add_library(ldpc_offload MODULE ${OPENAIR1_DIR}/PHY/CODING/nrLDPC_decoder/nrLDPC_decoder_offload.c)
set_target_properties(ldpc_offload PROPERTIES COMPILE_FLAGS "-DALLOW_EXPERIMENTAL_API")
target_compile_options(ldpc_offload PRIVATE ${LIBDPDK_CFLAGS})
target_link_libraries(ldpc_offload ${LIBDPDK_LDFLAGS} rte_pmd_hpac_sdfec_pmd "-Wl,-rpath /usr/local/lib64")
else()
message(STATUS "No T1 Offload support detected")
endif ()
########################################################## ##########################################################
include_directories ("${OPENAIR_DIR}/radio/COMMON") include_directories ("${OPENAIR_DIR}/radio/COMMON")
@@ -1033,16 +1003,26 @@ add_library(ldpc_cl MODULE ${PHY_LDPC_CL_SRC} )
target_link_libraries(ldpc_cl OpenCL) target_link_libraries(ldpc_cl OpenCL)
add_dependencies(ldpc_cl nrLDPC_decoder_kernels_CL) add_dependencies(ldpc_cl nrLDPC_decoder_kernels_CL)
if (CUDA_FOUND)
cuda_add_library(ldpc_cuda MODULE ${PHY_LDPC_CUDA_SRC} ) ##############################################
# Base CUDA setting
##############################################
add_boolean_option(BUILD_CUDA False "Build support for CUDA")
if (ENABLE_LDPC_CUDA)
find_package(CUDA REQUIRED)
SET(CUDA_NVCC_FLAG "${CUDA_NVCC_FLAGS};-arch=sm_60;")
SET(CUDA_VERBOSE_BUILD ON)
cuda_add_library(ldpc_cuda MODULE ${PHY_LDPC_CUDA_SRC})
set_target_properties(ldpc_cuda PROPERTIES CUDA_SEPARABLE_COMPILATION ON) set_target_properties(ldpc_cuda PROPERTIES CUDA_SEPARABLE_COMPILATION ON)
# CUDA_ADD_CUFFT_TO_TARGET(ldpc_cuda) if (NOT CUDA_FOUND)
endif (CUDA_FOUND) message(FATAL_ERROR "no CUDA found")
endif()
endif()
add_library(ldpc MODULE ${PHY_LDPC_OPTIM8SEGMULTI_SRC} ) add_library(ldpc MODULE ${PHY_LDPC_OPTIM8SEGMULTI_SRC} )
target_link_libraries(ldpc PRIVATE ldpc_gen_HEADERS) target_link_libraries(ldpc PRIVATE ldpc_gen_HEADERS)
add_library(coding MODULE ${PHY_TURBOSRC} ) add_library(coding MODULE ${PHY_TURBOSRC} )
target_link_libraries(coding PRIVATE asn1_nr_rrc asn1_lte_rrc) target_link_libraries(coding PRIVATE asn1_nr_rrc asn1_lte_rrc)
@@ -2384,11 +2364,11 @@ target_link_libraries(nr-softmodem PRIVATE ${LIB_LMS_LIBRARIES})
target_link_libraries(nr-softmodem PRIVATE ${T_LIB}) target_link_libraries(nr-softmodem PRIVATE ${T_LIB})
target_link_libraries(nr-softmodem PRIVATE asn1_nr_rrc asn1_lte_rrc) target_link_libraries(nr-softmodem PRIVATE asn1_nr_rrc asn1_lte_rrc)
add_dependencies( nr-softmodem ldpc_orig ldpc_optim ldpc_optim8seg ldpc) add_dependencies(nr-softmodem ldpc_orig ldpc_optim ldpc_optim8seg ldpc)
if(T1_OFFLOAD_FOUND) if (ENABLE_LDPC_T1)
add_dependencies( nr-softmodem ldpc_offload) add_dependencies(nr-softmodem ldpc_t1)
endif () endif()
# force the generation of ASN.1 so that we don't need to wait during the build # force the generation of ASN.1 so that we don't need to wait during the build
target_link_libraries(nr-softmodem PRIVATE target_link_libraries(nr-softmodem PRIVATE
@@ -2451,10 +2431,10 @@ target_link_libraries(nr-uesoftmodem PRIVATE ${T_LIB})
target_link_libraries(nr-uesoftmodem PRIVATE asn1_nr_rrc asn1_lte_rrc) target_link_libraries(nr-uesoftmodem PRIVATE asn1_nr_rrc asn1_lte_rrc)
add_dependencies( nr-uesoftmodem ldpc_orig ldpc_optim ldpc_optim8seg ldpc ) add_dependencies( nr-uesoftmodem ldpc_orig ldpc_optim ldpc_optim8seg ldpc )
if (CUDA_FOUND) if (ENABLE_LDPC_CUDA)
add_dependencies( nr-uesoftmodem ldpc_cuda) add_dependencies(nr-uesoftmodem ldpc_cuda)
add_dependencies( nr-softmodem ldpc_cuda) add_dependencies(nr-softmodem ldpc_cuda)
endif (CUDA_FOUND) endif()
# force the generation of ASN.1 so that we don't need to wait during the build # force the generation of ASN.1 so that we don't need to wait during the build
target_link_libraries(nr-uesoftmodem PRIVATE target_link_libraries(nr-uesoftmodem PRIVATE
@@ -2523,9 +2503,9 @@ add_executable(ldpctest
) )
add_dependencies( ldpctest ldpc_orig ldpc_optim ldpc_optim8seg ldpc ) add_dependencies( ldpctest ldpc_orig ldpc_optim ldpc_optim8seg ldpc )
if (CUDA_FOUND) if (ENABLE_LDPC_CUDA)
add_dependencies( ldpctest ldpc_cuda) add_dependencies(ldpctest ldpc_cuda)
endif (CUDA_FOUND) endif()
target_link_libraries(ldpctest PRIVATE target_link_libraries(ldpctest PRIVATE
-Wl,--start-group UTIL SIMU PHY_NR PHY_COMMON PHY_NR_COMMON CONFIG_LIB -Wl,--end-group -Wl,--start-group UTIL SIMU PHY_NR PHY_COMMON PHY_NR_COMMON CONFIG_LIB -Wl,--end-group
m pthread ${ATLAS_LIBRARIES} dl m pthread ${ATLAS_LIBRARIES} dl
@@ -2634,9 +2614,9 @@ add_executable(nr_ulsim
${SHLIB_LOADER_SOURCES} ${SHLIB_LOADER_SOURCES}
) )
if(T1_OFFLOAD_FOUND) if (ENABLE_LDPC_T1)
add_dependencies( nr_ulsim ldpc_offload) add_dependencies(nr_ulsim ldpc_t1)
endif () endif()
target_link_libraries(nr_ulsim PRIVATE target_link_libraries(nr_ulsim PRIVATE
-Wl,--start-group UTIL SIMU PHY_COMMON PHY_NR_COMMON PHY_NR PHY_NR_UE SCHED_NR_LIB SCHED_NR_UE_LIB MAC_NR MAC_UE_NR MAC_NR_COMMON lte_rrc nr_rrc CONFIG_LIB L2_LTE_NR L2_NR HASHTABLE x2ap SECU_CN ngap NFAPI_COMMON_LIB NFAPI_LIB NFAPI_PNF_LIB NFAPI_USER_LIB -lz -Wl,--end-group -Wl,--start-group UTIL SIMU PHY_COMMON PHY_NR_COMMON PHY_NR PHY_NR_UE SCHED_NR_LIB SCHED_NR_UE_LIB MAC_NR MAC_UE_NR MAC_NR_COMMON lte_rrc nr_rrc CONFIG_LIB L2_LTE_NR L2_NR HASHTABLE x2ap SECU_CN ngap NFAPI_COMMON_LIB NFAPI_LIB NFAPI_PNF_LIB NFAPI_USER_LIB -lz -Wl,--end-group
+1 -1
View File
@@ -77,7 +77,7 @@ pipeline {
withCredentials([ withCredentials([
[$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.DH_Credentials}", usernameVariable: 'DH_Username', passwordVariable: 'DH_Password'] [$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.DH_Credentials}", usernameVariable: 'DH_Username', passwordVariable: 'DH_Password']
]) { ]) {
def listOfImages = ["oai-enb", "oai-gnb", "oai-lte-ue", "oai-nr-ue"] def listOfImages = ["oai-enb", "oai-gnb", "oai-lte-ue", "oai-nr-ue", "oai-nr-cuup"]
// Logging in on both registries // Logging in on both registries
sh "docker login -u ${DH_Username} -p ${DH_Password} > /dev/null 2>&1" sh "docker login -u ${DH_Username} -p ${DH_Password} > /dev/null 2>&1"
sh "docker login -u oaicicd -p oaicicd porcepix.sboai.cs.eurecom.fr > /dev/null 2>&1" sh "docker login -u oaicicd -p oaicicd porcepix.sboai.cs.eurecom.fr > /dev/null 2>&1"
+5 -6
View File
@@ -74,23 +74,22 @@ class Cmd(metaclass=abc.ABCMeta):
class LocalCmd(Cmd): class LocalCmd(Cmd):
def __init__(self, d = None): def __init__(self, d = None):
self.cwd = d self.cwd = d
if self.cwd is not None:
logging.debug(f'Working dir is {self.cwd}')
self.cp = sp.CompletedProcess(args='', returncode=0, stdout='') self.cp = sp.CompletedProcess(args='', returncode=0, stdout='')
def run(self, line, timeout=300, silent=False, reportNonZero=True): def run(self, line, timeout=300, silent=False, reportNonZero=True):
if type(line) is str:
line = [s for s in line.split(' ') if len(s) > 0]
if not silent: if not silent:
logging.debug(' '.join(line)) logging.info(line)
try: try:
ret = sp.run(line, cwd=self.cwd, stdout=sp.PIPE, stderr=sp.STDOUT, timeout=timeout) ret = sp.run(line, shell=True, cwd=self.cwd, stdout=sp.PIPE, stderr=sp.STDOUT, timeout=timeout)
except Exception as e: except Exception as e:
ret = sp.CompletedProcess(args=line, returncode=255, stdout=f'Exception: {str(e)}'.encode('utf-8')) ret = sp.CompletedProcess(args=line, returncode=255, stdout=f'Exception: {str(e)}'.encode('utf-8'))
if ret.stdout is None: if ret.stdout is None:
ret.stdout = b'' ret.stdout = b''
ret.stdout = ret.stdout.decode('utf-8').strip() ret.stdout = ret.stdout.decode('utf-8').strip()
if reportNonZero and ret.returncode != 0: if reportNonZero and ret.returncode != 0:
cmd = ' '.join(ret.args) logging.warning(f'command "{ret.args}" returned non-zero returncode {ret.returncode}: output:\n{ret.stdout}')
logging.warning(f'command "{cmd}" returned non-zero returncode {ret.returncode}: output:\n{ret.stdout}')
self.cp = ret self.cp = ret
return ret return ret
+180 -175
View File
@@ -38,6 +38,9 @@ import os
import shutil import shutil
import subprocess import subprocess
import time import time
import pyshark
import threading
import cls_cmd
from multiprocessing import Process, Lock, SimpleQueue from multiprocessing import Process, Lock, SimpleQueue
from zipfile import ZipFile from zipfile import ZipFile
@@ -62,7 +65,8 @@ def CreateWorkspace(sshSession, sourcePath, ranRepository, ranCommitID, ranTarge
sshSession.command('mkdir -p ' + sourcePath, '\$', 5) sshSession.command('mkdir -p ' + sourcePath, '\$', 5)
sshSession.command('cd ' + sourcePath, '\$', 5) sshSession.command('cd ' + sourcePath, '\$', 5)
# Recent version of git (>2.20?) should handle missing .git extension # without problems # Recent version of git (>2.20?) should handle missing .git extension # without problems
sshSession.command(f'git clone --filter=blob:none -n -b develop {ranRepository} .', '\$', 60) baseBranch = re.sub('origin/', '', ranTargetBranch)
sshSession.command(f'git clone --filter=blob:none -n -b {baseBranch} {ranRepository} .', '\$', 60)
if sshSession.getBefore().count('error') > 0 or sshSession.getBefore().count('error') > 0: if sshSession.getBefore().count('error') > 0 or sshSession.getBefore().count('error') > 0:
sys.exit('error during clone') sys.exit('error during clone')
sshSession.command('git config user.email "jenkins@openairinterface.org"', '\$', 5) sshSession.command('git config user.email "jenkins@openairinterface.org"', '\$', 5)
@@ -287,6 +291,7 @@ class Containerize():
self.deployedContainers = [] self.deployedContainers = []
self.tsharkStarted = False self.tsharkStarted = False
self.displayedNewTags = False
self.pingContName = '' self.pingContName = ''
self.pingOptions = '' self.pingOptions = ''
self.pingLossThreshold = '' self.pingLossThreshold = ''
@@ -345,7 +350,7 @@ class Containerize():
self.dockerfileprefix = '.rhel8.2' self.dockerfileprefix = '.rhel8.2'
self.cliBuildOptions = '--no-cache --disable-compression' self.cliBuildOptions = '--no-cache --disable-compression'
# we always build the ran-build image with all targets # we always build the ran-build image with all targets
imageNames = [('ran-build', 'build')] imageNames = [('ran-build', 'build')]
result = re.search('eNB', self.imageKind) result = re.search('eNB', self.imageKind)
# Creating a tupple with the imageName and the DockerFile prefix pattern on obelix # Creating a tupple with the imageName and the DockerFile prefix pattern on obelix
@@ -547,14 +552,17 @@ class Containerize():
oldRanCommidID = self.ranCommitID oldRanCommidID = self.ranCommitID
oldRanRepository = self.ranRepository oldRanRepository = self.ranRepository
oldRanAllowMerge = self.ranAllowMerge oldRanAllowMerge = self.ranAllowMerge
oldRanTargetBranch = self.ranTargetBranch
self.ranCommitID = self.proxyCommit self.ranCommitID = self.proxyCommit
self.ranRepository = 'https://github.com/EpiSci/oai-lte-5g-multi-ue-proxy.git' self.ranRepository = 'https://github.com/EpiSci/oai-lte-5g-multi-ue-proxy.git'
self.ranAllowMerge = False self.ranAllowMerge = False
self.ranTargetBranch = 'master'
CreateWorkspace(mySSH, lSourcePath, self.ranRepository, self.ranCommitID, self.ranTargetBranch, self.ranAllowMerge) CreateWorkspace(mySSH, lSourcePath, self.ranRepository, self.ranCommitID, self.ranTargetBranch, self.ranAllowMerge)
# to prevent accidentally overwriting data that might be used later # to prevent accidentally overwriting data that might be used later
self.ranCommitID = oldRanCommidID self.ranCommitID = oldRanCommidID
self.ranRepository = oldRanRepository self.ranRepository = oldRanRepository
self.ranAllowMerge = oldRanAllowMerge self.ranAllowMerge = oldRanAllowMerge
self.ranTargetBranch = oldRanTargetBranch
# Let's remove any previous run artifacts if still there # Let's remove any previous run artifacts if still there
mySSH.command(self.cli + ' image prune --force', '\$', 30) mySSH.command(self.cli + ' image prune --force', '\$', 30)
@@ -571,6 +579,7 @@ class Containerize():
# Note: at this point, OAI images are flattened, but we cannot do this # Note: at this point, OAI images are flattened, but we cannot do this
# here, as the flatten script is not in the proxy repo # here, as the flatten script is not in the proxy repo
mySSH.command(self.cli + ' image inspect --format=\'Size = {{.Size}} bytes\' proxy:' + tag, '\$', 5) mySSH.command(self.cli + ' image inspect --format=\'Size = {{.Size}} bytes\' proxy:' + tag, '\$', 5)
mySSH.command(self.cli + ' image prune --force || true','\$', 15)
if mySSH.getBefore().count('o such image') != 0: if mySSH.getBefore().count('o such image') != 0:
logging.error('\u001B[1m Build of L2sim proxy failed\u001B[0m') logging.error('\u001B[1m Build of L2sim proxy failed\u001B[0m')
mySSH.close() mySSH.close()
@@ -730,60 +739,42 @@ class Containerize():
sys.exit('Insufficient Parameter') sys.exit('Insufficient Parameter')
if lIpAddr != 'none': if lIpAddr != 'none':
logging.debug('Pulling images onto server: ' + lIpAddr) logging.debug('Pulling images onto server: ' + lIpAddr)
mySSH = SSH.SSHConnection() myCmd = cls_cmd.RemoteCmd(lIpAddr)
mySSH.open(lIpAddr, lUserName, lPassWord)
else: else:
logging.debug('Pulling images locally') logging.debug('Pulling images locally')
myCmd = cls_cmd.LocalCmd()
cmd = 'docker login -u oaicicd -p oaicicd porcepix.sboai.cs.eurecom.fr' cmd = 'docker login -u oaicicd -p oaicicd porcepix.sboai.cs.eurecom.fr'
if lIpAddr != 'none': response = myCmd.run(cmd)
mySSH.command(cmd, '\$', 5) if response.returncode != 0:
response = mySSH.getBefore()
else:
logging.info(cmd)
response = subprocess.check_output(cmd, shell=True, universal_newlines=True, stderr=subprocess.STDOUT)
if re.search('Login Succeeded', response) is None:
msg = 'Could not log into local registry' msg = 'Could not log into local registry'
logging.error(msg) logging.error(msg)
if lIpAddr != 'none': myCmd.close()
mySSH.close()
HTML.CreateHtmlTestRow(msg, 'KO', CONST.ALL_PROCESSES_OK) HTML.CreateHtmlTestRow(msg, 'KO', CONST.ALL_PROCESSES_OK)
return False return False
for image in self.imageToPull: for image in self.imageToPull:
tagToUse = self.ImageTagToUse(image) tagToUse = self.ImageTagToUse(image)
cmd = f'docker pull {tagToUse}' cmd = f'docker pull {tagToUse}'
if lIpAddr != 'none': response = myCmd.run(cmd, timeout=120)
mySSH.command(cmd, '\$', 120) if response.returncode != 0:
response = mySSH.getBefore()
else:
logging.info(cmd)
response = subprocess.check_output(cmd, shell=True, universal_newlines=True)
if re.search('Status: Downloaded newer image for |Status: Image is up to date for', response) is None:
logging.debug(response) logging.debug(response)
msg = f'Could not pull {image} from local registry : {tagToUse}' msg = f'Could not pull {image} from local registry : {tagToUse}'
logging.error(msg) logging.error(msg)
if lIpAddr != 'none': myCmd.close()
mySSH.close()
HTML.CreateHtmlTestRow('msg', 'KO', CONST.ALL_PROCESSES_OK) HTML.CreateHtmlTestRow('msg', 'KO', CONST.ALL_PROCESSES_OK)
return False return False
cmd = 'docker logout porcepix.sboai.cs.eurecom.fr' cmd = 'docker logout porcepix.sboai.cs.eurecom.fr'
if lIpAddr != 'none': response = myCmd.run(cmd)
mySSH.command(cmd, '\$', 5) if response.returncode != 0:
response = mySSH.getBefore()
else:
logging.info(cmd)
response = subprocess.check_output(cmd, shell=True, universal_newlines=True)
if re.search('Removing login credentials', response) is None:
msg = 'Could not log off from local registry' msg = 'Could not log off from local registry'
logging.error(msg) logging.error(msg)
mySSH.close() myCmd.close()
HTML.CreateHtmlTestRow(msg, 'KO', CONST.ALL_PROCESSES_OK) HTML.CreateHtmlTestRow(msg, 'KO', CONST.ALL_PROCESSES_OK)
return False return False
if lIpAddr != 'none': myCmd.close()
mySSH.close()
HTML.CreateHtmlTestRow('N/A', 'OK', CONST.ALL_PROCESSES_OK) HTML.CreateHtmlTestRow('N/A', 'OK', CONST.ALL_PROCESSES_OK)
return True return True
@@ -810,22 +801,17 @@ class Containerize():
sys.exit('Insufficient Parameter') sys.exit('Insufficient Parameter')
if lIpAddr != 'none': if lIpAddr != 'none':
logging.debug('Removing test images from server: ' + lIpAddr) logging.debug('Removing test images from server: ' + lIpAddr)
mySSH = SSH.SSHConnection() myCmd = cls_cmd.RemoteCmd(lIpAddr)
mySSH.open(lIpAddr, lUserName, lPassWord)
else: else:
logging.debug('Removing test images locally') logging.debug('Removing test images locally')
myCmd = cls_cmd.LocalCmd()
imageNames = ['oai-enb', 'oai-gnb', 'oai-lte-ue', 'oai-nr-ue', 'oai-lte-ru', 'oai-nr-cuup'] imageNames = ['oai-enb', 'oai-gnb', 'oai-lte-ue', 'oai-nr-ue', 'oai-lte-ru', 'oai-nr-cuup']
for image in imageNames: for image in imageNames:
cmd = f'docker rmi {self.ImageTagToUse(image)} || true' cmd = f'docker rmi {self.ImageTagToUse(image)}'
if lIpAddr != 'none': myCmd.run(cmd, reportNonZero=False)
mySSH.command(cmd, '\$', 5)
else:
logging.info(cmd)
subprocess.run(cmd, shell=True, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
if lIpAddr != 'none': myCmd.close()
mySSH.close()
HTML.CreateHtmlTestRow('N/A', 'OK', CONST.ALL_PROCESSES_OK) HTML.CreateHtmlTestRow('N/A', 'OK', CONST.ALL_PROCESSES_OK)
return True return True
@@ -865,7 +851,6 @@ class Containerize():
mySSH.command('sed -i -e "s/CI_MME_IP_ADDR/' + localMmeIpAddr + '/" ci-docker-compose.yml', '\$', 2) mySSH.command('sed -i -e "s/CI_MME_IP_ADDR/' + localMmeIpAddr + '/" ci-docker-compose.yml', '\$', 2)
# Currently support only one # Currently support only one
mySSH.command('echo ' + lPassWord + ' | sudo -S b2xx_fx3_utils --reset-device', '\$', 15)
svcName = self.services[self.eNB_instance] svcName = self.services[self.eNB_instance]
if svcName == '': if svcName == '':
logging.warning('no service name given: starting all services in ci-docker-compose.yml!') logging.warning('no service name given: starting all services in ci-docker-compose.yml!')
@@ -922,7 +907,7 @@ class Containerize():
if healthyNb == 1: if healthyNb == 1:
cnt = 0 cnt = 0
while (cnt < 20): while (cnt < 20):
mySSH.command('docker logs ' + containerName + ' | egrep --text --color=never -i "wait|sync|Starting"', '\$', 30) mySSH.command('docker logs ' + containerName + ' | egrep --text --color=never -i "wait|sync|Starting"', '\$', 30)
result = re.search('got sync|Starting F1AP at CU', mySSH.getBefore()) result = re.search('got sync|Starting F1AP at CU', mySSH.getBefore())
if result is None: if result is None:
time.sleep(6) time.sleep(6)
@@ -1048,54 +1033,58 @@ class Containerize():
def DeployGenObject(self, HTML, RAN, UE): def DeployGenObject(self, HTML, RAN, UE):
self.exitStatus = 0 self.exitStatus = 0
logging.debug('\u001B[1m Checking Services to deploy\u001B[0m') logging.debug('\u001B[1m Checking Services to deploy\u001B[0m')
cmd = 'cd ' + self.yamlPath[0] + ' && docker-compose config --services' # Implicitly we are running locally
logging.info(cmd) myCmd = cls_cmd.LocalCmd(d = self.yamlPath[0])
try: cmd = 'docker-compose config --services'
listServices = subprocess.check_output(cmd, shell=True, universal_newlines=True) listServices = myCmd.run(cmd)
except Exception as e: if listServices.returncode != 0:
myCmd.close()
self.exitStatus = 1 self.exitStatus = 1
HTML.CreateHtmlTestRow('SVC not Found', 'KO', CONST.ALL_PROCESSES_OK) HTML.CreateHtmlTestRow('SVC not Found', 'KO', CONST.ALL_PROCESSES_OK)
return return
for reqSvc in self.services[0].split(' '): for reqSvc in self.services[0].split(' '):
res = re.search(reqSvc, listServices) res = re.search(reqSvc, listServices.stdout)
if res is None: if res is None:
logging.error(reqSvc + ' not found in specified docker-compose') logging.error(reqSvc + ' not found in specified docker-compose')
self.exitStatus = 1 self.exitStatus = 1
if (self.exitStatus == 1): if (self.exitStatus == 1):
myCmd.close()
HTML.CreateHtmlTestRow('SVC not Found', 'KO', CONST.ALL_PROCESSES_OK) HTML.CreateHtmlTestRow('SVC not Found', 'KO', CONST.ALL_PROCESSES_OK)
return return
cmd = 'cd ' + self.yamlPath[0] + ' && cp docker-compose.y*ml docker-compose-ci.yml' cmd = 'cp docker-compose.y*ml docker-compose-ci.yml'
subprocess.run(cmd, shell=True) myCmd.run(cmd, silent=self.displayedNewTags)
imageNames = ['oai-enb', 'oai-gnb', 'oai-lte-ue', 'oai-nr-ue', 'oai-lte-ru', 'oai-nr-cuup'] imageNames = ['oai-enb', 'oai-gnb', 'oai-lte-ue', 'oai-nr-ue', 'oai-lte-ru', 'oai-nr-cuup']
for image in imageNames: for image in imageNames:
tagToUse = self.ImageTagToUse(image) tagToUse = self.ImageTagToUse(image)
cmd = f'cd {self.yamlPath[0]} && sed -i -e "s@{image}:develop@{tagToUse}@" docker-compose-ci.yml' cmd = f'sed -i -e "s@oaisoftwarealliance/{image}:develop@{tagToUse}@" docker-compose-ci.yml'
logging.debug(cmd) myCmd.run(cmd, silent=self.displayedNewTags)
subprocess.run(cmd, shell=True) self.displayedNewTags = True
cmd = 'cd ' + self.yamlPath[0] + ' && docker-compose -f docker-compose-ci.yml up -d ' + self.services[0] cmd = f'docker-compose -f docker-compose-ci.yml up -d {self.services[0]}'
logging.info(cmd) deployStatus = myCmd.run(cmd, timeout=100)
try: if deployStatus.returncode != 0:
deployStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=100) myCmd.close()
except Exception as e:
self.exitStatus = 1 self.exitStatus = 1
logging.error('Could not deploy') logging.error('Could not deploy')
HTML.CreateHtmlTestRow('Could not deploy', 'KO', CONST.ALL_PROCESSES_OK) HTML.CreateHtmlTestRow('Could not deploy', 'KO', CONST.ALL_PROCESSES_OK)
return return
logging.debug('\u001B[1m Checking if all deployed healthy\u001B[0m') logging.debug('\u001B[1m Checking if all deployed healthy\u001B[0m')
cmd = 'cd ' + self.yamlPath[0] + ' && docker-compose -f docker-compose-ci.yml ps -a' cmd = 'docker-compose -f docker-compose-ci.yml ps -a'
count = 0 count = 0
healthy = 0 healthy = 0
restarting = 0
newContainers = [] newContainers = []
while (count < 10): while (count < 10):
count += 1 count += 1
containerStatus = [] containerStatus = []
deployStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=30) deployStatus = myCmd.run(cmd, 30, silent=True)
healthy = 0 healthy = 0
for state in deployStatus.split('\n'): restarting = 0
res = re.search('Name|----------', state) for state in deployStatus.stdout.split('\n'):
state = state.strip()
res = re.search('Name|NAME|----------', state)
if res is not None: if res is not None:
continue continue
if len(state) == 0: if len(state) == 0:
@@ -1110,23 +1099,32 @@ class Containerize():
if not found: if not found:
newContainers.append(cName) newContainers.append(cName)
self.deployedContainers.append(cName) self.deployedContainers.append(cName)
if re.search('Up \(healthy\)', state) is not None: if re.search('\(healthy\)', state) is not None:
healthy += 1 healthy += 1
if re.search('rfsim4g-db-init.*Exit 0', state) is not None: if re.search('rfsim4g-db-init.*Exit 0', state) is not None or re.search('rfsim4g-db-init.*Exited \(0\)', state) is not None:
subprocess.check_output('docker rm -f rfsim4g-db-init || true', shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=30) myCmd.run('docker rm -f rfsim4g-db-init', timeout=30, silent=True, reportNonZero=False)
containerStatus.append(state) if re.search('l2sim4g-db-init.*Exit 0', state) is not None or re.search('l2sim4g-db-init.*Exited \(0\)', state) is not None:
if healthy == self.nb_healthy[0]: myCmd.run('docker rm -f l2sim4g-db-init', timeout=30, silent=True, reportNonZero=False)
if re.search('Restarting', state) is None:
containerStatus.append(state)
else:
restarting += 1
if healthy == self.nb_healthy[0] and restarting == 0:
count = 100 count = 100
else: else:
time.sleep(10) time.sleep(10)
imagesInfo = '' imagesInfo = ''
for newCont in newContainers: for newCont in newContainers:
if newCont == 'rfsim4g-db-init':
continue
cmd = 'docker inspect -f "{{.Config.Image}}" ' + newCont cmd = 'docker inspect -f "{{.Config.Image}}" ' + newCont
imageName = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=30) imageInspect = myCmd.run(cmd, timeout=30, silent=True)
imageName = str(imageName).strip() imageName = str(imageInspect.stdout).strip()
cmd = 'docker image inspect --format "{{.RepoTags}}\t{{.Size}} bytes\t{{.Created}}\t{{.Id}}" ' + imageName cmd = 'docker image inspect --format "{{.RepoTags}}\t{{.Size}} bytes\t{{.Created}}\t{{.Id}}" ' + imageName
imagesInfo += subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=30) imageInspect = myCmd.run(cmd, 30, silent=True)
imagesInfo += imageInspect.stdout.strip()
myCmd.close()
html_queue = SimpleQueue() html_queue = SimpleQueue()
html_cell = '<pre style="background-color:white">\n' html_cell = '<pre style="background-color:white">\n'
@@ -1158,48 +1156,71 @@ class Containerize():
self.UndeployGenObject(HTML, RAN, UE) self.UndeployGenObject(HTML, RAN, UE)
self.exitStatus = 1 self.exitStatus = 1
def CaptureOnDockerNetworks(self): # pyshark livecapture launches 2 processes:
cmd = 'cd ' + self.yamlPath[0] + ' && docker-compose -f docker-compose-ci.yml config | grep com.docker.network.bridge.name | sed -e "s@^.*name: @@"' # * One using dumpcap -i lIfs -w - (ie redirecting the packets to STDOUT)
networkNames = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=10) # * One using tshark -i - -w loFile (ie capturing from STDIN from previous process)
# but in fact the packets are read by the following loop before being in fact
# really written to loFile.
# So it is mandatory to keep the loop
def LaunchPySharkCapture(self, lIfs, lFilter, loFile):
capture = pyshark.LiveCapture(interface=lIfs, bpf_filter=lFilter, output_file=loFile, debug=False)
for packet in capture.sniff_continuously():
pass
def CaptureOnDockerNetworks(self):
myCmd = cls_cmd.LocalCmd(d = self.yamlPath[0])
cmd = 'docker-compose -f docker-compose-ci.yml config | grep com.docker.network.bridge.name | sed -e "s@^.*name: @@"'
networkNames = myCmd.run(cmd, silent=True)
myCmd.close()
# Allow only: control plane RAN (SCTP), HTTP of control in CN (port 80), PFCP traffic (port 8805), MySQL (port 3306) # Allow only: control plane RAN (SCTP), HTTP of control in CN (port 80), PFCP traffic (port 8805), MySQL (port 3306)
cmd = 'sudo nohup tshark -f "sctp or port 80 or port 8805 or icmp or port 3306"' capture_filter = 'sctp or port 80 or port 8805 or icmp or port 3306'
for name in networkNames.split('\n'): interfaces = []
iInterfaces = ''
for name in networkNames.stdout.split('\n'):
if re.search('rfsim', name) is not None or re.search('l2sim', name) is not None: if re.search('rfsim', name) is not None or re.search('l2sim', name) is not None:
cmd += ' -i ' + name interfaces.append(name)
cmd += ' -w /tmp/capture_' iInterfaces += f'-i {name} '
ymlPath = self.yamlPath[0].split('/') ymlPath = self.yamlPath[0].split('/')
cmd += ymlPath[1] + '.pcap > /tmp/tshark.log 2>&1 &' output_file = f'/tmp/capture_{ymlPath[1]}.pcap'
logging.info(cmd)
networkNames = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=10)
self.tsharkStarted = True self.tsharkStarted = True
# On old systems (ubuntu 18), pyshark live-capture is buggy.
# Going back to old method
if sys.version_info < (3, 7):
cmd = f'nohup tshark -f "{capture_filter}" {iInterfaces} -w {output_file} > /tmp/tshark.log 2>&1 &'
myCmd = cls_cmd.LocalCmd()
myCmd.run(cmd, timeout=5, reportNonZero=False)
myCmd.close()
return
x = threading.Thread(target = self.LaunchPySharkCapture, args = (interfaces,capture_filter,output_file,))
x.daemon = True
x.start()
def UndeployGenObject(self, HTML, RAN, UE): def UndeployGenObject(self, HTML, RAN, UE):
self.exitStatus = 0 self.exitStatus = 0
# Implicitly we are running locally
ymlPath = self.yamlPath[0].split('/') ymlPath = self.yamlPath[0].split('/')
logPath = '../cmake_targets/log/' + ymlPath[1] logPath = '../cmake_targets/log/' + ymlPath[1]
myCmd = cls_cmd.LocalCmd(d = self.yamlPath[0])
cmd = 'cd ' + self.yamlPath[0] + ' && cp docker-compose.y*ml docker-compose-ci.yml' cmd = 'cp docker-compose.y*ml docker-compose-ci.yml'
logging.info(cmd) myCmd.run(cmd, silent=self.displayedNewTags)
subprocess.run(cmd, shell=True)
imageNames = ['oai-enb', 'oai-gnb', 'oai-lte-ue', 'oai-nr-ue', 'oai-lte-ru', 'oai-nr-cuup'] imageNames = ['oai-enb', 'oai-gnb', 'oai-lte-ue', 'oai-nr-ue', 'oai-lte-ru', 'oai-nr-cuup']
for image in imageNames: for image in imageNames:
tagToUse = self.ImageTagToUse(image) tagToUse = self.ImageTagToUse(image)
cmd = f'cd {self.yamlPath[0]} && sed -i -e "s@{image}:develop@{tagToUse}@" docker-compose-ci.yml' cmd = f'sed -i -e "s@oaisoftwarealliance/{image}:develop@{tagToUse}@" docker-compose-ci.yml'
subprocess.run(cmd, shell=True) myCmd.run(cmd, silent=self.displayedNewTags)
self.displayedNewTags = True
# check which containers are running for log recovery later # check which containers are running for log recovery later
cmd = 'cd ' + self.yamlPath[0] + ' && docker-compose -f docker-compose-ci.yml ps --all' cmd = 'docker-compose -f docker-compose-ci.yml ps --all'
logging.info(cmd) deployStatusLogs = myCmd.run(cmd, timeout=30)
deployStatusLogs = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=30)
# Stop the containers to shut down objects # Stop the containers to shut down objects
logging.debug('\u001B[1m Stopping containers \u001B[0m') logging.debug('\u001B[1m Stopping containers \u001B[0m')
cmd = 'cd ' + self.yamlPath[0] + ' && docker-compose -f docker-compose-ci.yml stop -t3' cmd = 'docker-compose -f docker-compose-ci.yml stop -t3'
logging.info(cmd) deployStatus = myCmd.run(cmd, timeout=100)
try: if deployStatus.returncode != 0:
deployStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=100) myCmd.close()
except Exception as e:
self.exitStatus = 1 self.exitStatus = 1
logging.error('Could not stop containers') logging.error('Could not stop containers')
HTML.CreateHtmlTestRow('Could not stop', 'KO', CONST.ALL_PROCESSES_OK) HTML.CreateHtmlTestRow('Could not stop', 'KO', CONST.ALL_PROCESSES_OK)
@@ -1207,8 +1228,12 @@ class Containerize():
return return
anyLogs = False anyLogs = False
for state in deployStatusLogs.split('\n'): logging.debug('Working dir is now . (ie ci-scripts)')
res = re.search('Name|----------', state) myCmd2 = cls_cmd.LocalCmd()
myCmd2.run(f'mkdir -p {logPath}')
myCmd2.cd(logPath)
for state in deployStatusLogs.stdout.split('\n'):
res = re.search('Name|NAME|----------', state)
if res is not None: if res is not None:
continue continue
if len(state) == 0: if len(state) == 0:
@@ -1217,36 +1242,26 @@ class Containerize():
if res is not None: if res is not None:
anyLogs = True anyLogs = True
cName = res.group('container_name') cName = res.group('container_name')
cmd = 'cd ' + self.yamlPath[0] + ' && docker logs ' + cName + ' > ' + cName + '.log 2>&1' cmd = f'docker logs {cName} > {cName}.log 2>&1'
logging.info(cmd) myCmd2.run(cmd, timeout=30, reportNonZero=False)
subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=30)
if re.search('magma-mme', cName) is not None: if re.search('magma-mme', cName) is not None:
cmd = 'cd ' + self.yamlPath[0] + ' && docker cp -L ' + cName + ':/var/log/mme.log ' + cName + '-full.log' cmd = f'docker cp -L {cName}:/var/log/mme.log {cName}-full.log'
logging.info(cmd) myCmd2.run(cmd, timeout=30, reportNonZero=False)
subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=30)
fullStatus = True fullStatus = True
if anyLogs: if anyLogs:
cmd = 'mkdir -p '+ logPath + ' && cp ' + self.yamlPath[0] + '/*.log ' + logPath
logging.info(cmd)
deployStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=10)
# Analyzing log file(s)! # Analyzing log file(s)!
listOfPossibleRanContainers = ['enb', 'gnb', 'cu', 'du'] listOfPossibleRanContainers = ['enb', 'gnb', 'cu', 'du']
for container in listOfPossibleRanContainers: for container in listOfPossibleRanContainers:
filenames = self.yamlPath[0] + '/*-oai-' + container + '.log' filenames = './*-oai-' + container + '.log'
cmd = 'ls ' + filenames cmd = f'ls {filenames}'
containerStatus = True lsStatus = myCmd2.run(cmd, silent=True, reportNonZero=False)
try: if lsStatus.returncode != 0:
lsStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=10)
filenames = str(lsStatus).strip()
except:
containerStatus = False
if not containerStatus:
continue continue
filenames = str(lsStatus.stdout).strip()
for filename in filenames.split('\n'): for filename in filenames.split('\n'):
logging.debug('\u001B[1m Analyzing xNB logfile ' + filename + ' \u001B[0m') logging.debug('\u001B[1m Analyzing xNB logfile ' + filename + ' \u001B[0m')
logStatus = RAN.AnalyzeLogFile_eNB(filename, HTML, self.ran_checkers) logStatus = RAN.AnalyzeLogFile_eNB(f'{logPath}/{filename}', HTML, self.ran_checkers)
if (logStatus < 0): if (logStatus < 0):
fullStatus = False fullStatus = False
self.exitStatus = 1 self.exitStatus = 1
@@ -1256,49 +1271,42 @@ class Containerize():
listOfPossibleUeContainers = ['lte-ue*', 'nr-ue*'] listOfPossibleUeContainers = ['lte-ue*', 'nr-ue*']
for container in listOfPossibleUeContainers: for container in listOfPossibleUeContainers:
filenames = self.yamlPath[0] + '/*-oai-' + container + '.log' filenames = './*-oai-' + container + '.log'
cmd = 'ls ' + filenames cmd = f'ls {filenames}'
containerStatus = True lsStatus = myCmd2.run(cmd, silent=True, reportNonZero=False)
try: if lsStatus.returncode != 0:
lsStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=10)
filenames = str(lsStatus).strip()
except:
containerStatus = False
if not containerStatus:
continue continue
filenames = str(lsStatus.stdout).strip()
for filename in filenames.split('\n'): for filename in filenames.split('\n'):
logging.debug('\u001B[1m Analyzing UE logfile ' + filename + ' \u001B[0m') logging.debug('\u001B[1m Analyzing UE logfile ' + filename + ' \u001B[0m')
logStatus = UE.AnalyzeLogFile_UE(filename, HTML, RAN) logStatus = UE.AnalyzeLogFile_UE(f'{logPath}/{filename}', HTML, RAN)
if (logStatus < 0): if (logStatus < 0):
fullStatus = False fullStatus = False
HTML.CreateHtmlTestRow('UE log Analysis', 'KO', logStatus) HTML.CreateHtmlTestRow('UE log Analysis', 'KO', logStatus)
else: else:
HTML.CreateHtmlTestRow('UE log Analysis', 'OK', CONST.ALL_PROCESSES_OK) HTML.CreateHtmlTestRow('UE log Analysis', 'OK', CONST.ALL_PROCESSES_OK)
cmd = 'rm ' + self.yamlPath[0] + '/*.log'
logging.info(cmd)
deployStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=10)
if self.tsharkStarted: if self.tsharkStarted:
self.tsharkStarted = True self.tsharkStarted = True
cmd = 'killall tshark'
myCmd2.run(cmd, reportNonZero=False)
cmd = 'killall dumpcap'
myCmd2.run(cmd, reportNonZero=False)
time.sleep(5)
ymlPath = self.yamlPath[0].split('/') ymlPath = self.yamlPath[0].split('/')
cmd = 'sudo chmod 666 /tmp/capture_' + ymlPath[1] + '.pcap' # The working dir is still logPath
logging.info(cmd) cmd = f'mv /tmp/capture_{ymlPath[1]}.pcap .'
copyStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=10) myCmd2.run(cmd, timeout=100, reportNonZero=False)
cmd = 'cp /tmp/capture_' + ymlPath[1] + '.pcap ' + logPath
logging.info(cmd)
copyStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=10)
cmd = 'sudo rm /tmp/capture_' + ymlPath[1] + '.pcap'
logging.info(cmd)
copyStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=10)
self.tsharkStarted = False self.tsharkStarted = False
myCmd2.close()
logging.debug('\u001B[1m Undeploying \u001B[0m') logging.debug('\u001B[1m Undeploying \u001B[0m')
cmd = 'cd ' + self.yamlPath[0] + ' && docker-compose -f docker-compose-ci.yml down' logging.debug(f'Working dir is back {self.yamlPath[0]}')
logging.info(cmd) cmd = 'docker-compose -f docker-compose-ci.yml down'
try: deployStatus = myCmd.run(cmd, timeout=100)
deployStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=100) if deployStatus.returncode != 0:
except Exception as e: myCmd.close()
self.exitStatus = 1 self.exitStatus = 1
logging.error('Could not undeploy') logging.error('Could not undeploy')
HTML.CreateHtmlTestRow('Could not undeploy', 'KO', CONST.ALL_PROCESSES_OK) HTML.CreateHtmlTestRow('Could not undeploy', 'KO', CONST.ALL_PROCESSES_OK)
@@ -1307,9 +1315,9 @@ class Containerize():
self.deployedContainers = [] self.deployedContainers = []
# Cleaning any created tmp volume # Cleaning any created tmp volume
cmd = 'docker volume prune --force || true' cmd = 'docker volume prune --force'
logging.info(cmd) deployStatus = myCmd.run(cmd, timeout=100, reportNonZero=False)
deployStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=100) myCmd.close()
if fullStatus: if fullStatus:
HTML.CreateHtmlTestRow('n/a', 'OK', CONST.ALL_PROCESSES_OK) HTML.CreateHtmlTestRow('n/a', 'OK', CONST.ALL_PROCESSES_OK)
@@ -1324,13 +1332,13 @@ class Containerize():
logPath = '../cmake_targets/log/' + ymlPath[1] logPath = '../cmake_targets/log/' + ymlPath[1]
# if the containers are running, recover the logs! # if the containers are running, recover the logs!
cmd = 'cd ' + self.yamlPath[0] + ' && docker-compose -f docker-compose-ci.yml ps --all' myCmd = cls_cmd.LocalCmd(d = self.yamlPath[0])
logging.info(cmd) cmd = 'docker-compose -f docker-compose-ci.yml ps --all'
deployStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=30) deployStatus = myCmd.run(cmd, timeout=30)
cmd = 'docker stats --no-stream --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.MemPerc}}" ' cmd = 'docker stats --no-stream --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.MemPerc}}" '
anyLogs = False anyLogs = False
for state in deployStatus.split('\n'): for state in deployStatus.stdout.split('\n'):
res = re.search('Name|----------', state) res = re.search('Name|NAME|----------', state)
if res is not None: if res is not None:
continue continue
if len(state) == 0: if len(state) == 0:
@@ -1341,11 +1349,11 @@ class Containerize():
cmd += res.group('container_name') + ' ' cmd += res.group('container_name') + ' '
message = '' message = ''
if anyLogs: if anyLogs:
logging.info(cmd) stats = myCmd.run(cmd, timeout=30)
stats = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=30) for statLine in stats.stdout.split('\n'):
for statLine in stats.split('\n'):
logging.debug(statLine) logging.debug(statLine)
message += statLine + '\n' message += statLine + '\n'
myCmd.close()
html_queue = SimpleQueue() html_queue = SimpleQueue()
html_cell = '<pre style="background-color:white">\n' + message + '</pre>' html_cell = '<pre style="background-color:white">\n' + message + '</pre>'
@@ -1353,18 +1361,18 @@ class Containerize():
HTML.CreateHtmlTestRowQueue(self.pingOptions, 'OK', 1, html_queue) HTML.CreateHtmlTestRowQueue(self.pingOptions, 'OK', 1, html_queue)
def PingFromContainer(self, HTML, RAN, UE): def PingFromContainer(self, HTML, RAN, UE):
myCmd = cls_cmd.LocalCmd()
self.exitStatus = 0 self.exitStatus = 0
ymlPath = self.yamlPath[0].split('/') ymlPath = self.yamlPath[0].split('/')
logPath = '../cmake_targets/log/' + ymlPath[1] logPath = '../cmake_targets/log/' + ymlPath[1]
cmd = 'mkdir -p ' + logPath cmd = f'mkdir -p {logPath}'
deployStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=10) myCmd.run(cmd, silent=True)
cmd = 'docker exec ' + self.pingContName + ' /bin/bash -c "ping ' + self.pingOptions + '" 2>&1 | tee ' + logPath + '/ping_' + HTML.testCase_id + '.log || true' cmd = f'docker exec {self.pingContName} /bin/bash -c "ping {self.pingOptions}" 2>&1 | tee {logPath}/ping_{HTML.testCase_id}.log'
pingStatus = myCmd.run(cmd, timeout=100, reportNonZero=False)
myCmd.close()
logging.info(cmd) result = re.search(', (?P<packetloss>[0-9\.]+)% packet loss, time [0-9\.]+ms', pingStatus.stdout)
deployStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=100)
result = re.search(', (?P<packetloss>[0-9\.]+)% packet loss, time [0-9\.]+ms', deployStatus)
if result is None: if result is None:
self.PingExit(HTML, RAN, UE, False, 'Packet Loss Not Found') self.PingExit(HTML, RAN, UE, False, 'Packet Loss Not Found')
return return
@@ -1374,7 +1382,7 @@ class Containerize():
self.PingExit(HTML, RAN, UE, False, 'Packet Loss is 100%') self.PingExit(HTML, RAN, UE, False, 'Packet Loss is 100%')
return return
result = re.search('rtt min\/avg\/max\/mdev = (?P<rtt_min>[0-9\.]+)\/(?P<rtt_avg>[0-9\.]+)\/(?P<rtt_max>[0-9\.]+)\/[0-9\.]+ ms', deployStatus) result = re.search('rtt min\/avg\/max\/mdev = (?P<rtt_min>[0-9\.]+)\/(?P<rtt_avg>[0-9\.]+)\/(?P<rtt_max>[0-9\.]+)\/[0-9\.]+ ms', pingStatus.stdout)
if result is None: if result is None:
self.PingExit(HTML, RAN, UE, False, 'Ping RTT_Min RTT_Avg RTT_Max Not Found!') self.PingExit(HTML, RAN, UE, False, 'Ping RTT_Min RTT_Avg RTT_Max Not Found!')
return return
@@ -1427,39 +1435,37 @@ class Containerize():
self.exitStatus = 1 self.exitStatus = 1
def IperfFromContainer(self, HTML, RAN, UE): def IperfFromContainer(self, HTML, RAN, UE):
myCmd = cls_cmd.LocalCmd()
self.exitStatus = 0 self.exitStatus = 0
ymlPath = self.yamlPath[0].split('/') ymlPath = self.yamlPath[0].split('/')
logPath = '../cmake_targets/log/' + ymlPath[1] logPath = '../cmake_targets/log/' + ymlPath[1]
cmd = 'mkdir -p ' + logPath cmd = f'mkdir -p {logPath}'
logStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=10) myCmd.run(cmd, silent=True)
# Start the server process # Start the server process
cmd = f'docker exec -d {self.svrContName} /bin/bash -c "nohup iperf {self.svrOptions} > /tmp/iperf_server.log 2>&1"' cmd = f'docker exec -d {self.svrContName} /bin/bash -c "nohup iperf {self.svrOptions} > /tmp/iperf_server.log 2>&1"'
logging.info(cmd) myCmd.run(cmd)
subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=10)
time.sleep(3) time.sleep(3)
# Start the client process # Start the client process
cmd = f'docker exec {self.cliContName} /bin/bash -c "iperf {self.cliOptions}" 2>&1 | tee {logPath}/iperf_client_{HTML.testCase_id}.log' cmd = f'docker exec {self.cliContName} /bin/bash -c "iperf {self.cliOptions}" 2>&1 | tee {logPath}/iperf_client_{HTML.testCase_id}.log'
logging.info(cmd) clientStatus = myCmd.run(cmd, timeout=100)
clientStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=100)
# Stop the server process # Stop the server process
cmd = f'docker exec {self.svrContName} /bin/bash -c "pkill iperf"' cmd = f'docker exec {self.svrContName} /bin/bash -c "pkill iperf"'
logging.info(cmd) myCmd.run(cmd)
subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=10)
time.sleep(3) time.sleep(3)
serverStatusFilename = f'{logPath}/iperf_server_{HTML.testCase_id}.log' serverStatusFilename = f'{logPath}/iperf_server_{HTML.testCase_id}.log'
cmd = f'docker cp {self.svrContName}:/tmp/iperf_server.log {serverStatusFilename}' cmd = f'docker cp {self.svrContName}:/tmp/iperf_server.log {serverStatusFilename}'
logging.info(cmd) myCmd.run(cmd, timeout=60)
subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=30) myCmd.close()
# clientStatus was retrieved above. The serverStatus was # clientStatus was retrieved above. The serverStatus was
# written in the background, then copied to the local machine # written in the background, then copied to the local machine
with open(serverStatusFilename, 'r') as f: with open(serverStatusFilename, 'r') as f:
serverStatus = f.read() serverStatus = f.read()
(iperfStatus, msg) = AnalyzeIperf(self.cliOptions, clientStatus, serverStatus) (iperfStatus, msg) = AnalyzeIperf(self.cliOptions, clientStatus.stdout, serverStatus)
if iperfStatus: if iperfStatus:
logging.info('\u001B[1m Iperf Test PASS\u001B[0m') logging.info('\u001B[1m Iperf Test PASS\u001B[0m')
else: else:
@@ -1595,4 +1601,3 @@ class Containerize():
if result is None: if result is None:
mySSH.command('echo ' + password + ' | sudo -S iptables -P FORWARD ACCEPT', '\$', 10) mySSH.command('echo ' + password + ' | sudo -S iptables -P FORWARD ACCEPT', '\$', 10)
mySSH.close() mySSH.close()
-11
View File
@@ -453,17 +453,6 @@ class OaiCiTest():
UE_prefix = 'NR ' UE_prefix = 'NR '
SSH = sshconnection.SSHConnection() SSH = sshconnection.SSHConnection()
SSH.open(self.UEIPAddress, self.UEUserName, self.UEPassword) SSH.open(self.UEIPAddress, self.UEUserName, self.UEPassword)
# b2xx_fx3_utils reset procedure
SSH.command('echo ' + self.UEPassword + ' | sudo -S uhd_find_devices', '\$', 180)
result = re.search('type: b200', SSH.getBefore())
if result is not None:
logging.debug('Found a B2xx device --> resetting it')
SSH.command('echo ' + self.UEPassword + ' | sudo -S b2xx_fx3_utils --reset-device', '\$', 10)
# Reloading FGPA bin firmware
SSH.command('echo ' + self.UEPassword + ' | sudo -S uhd_find_devices', '\$', 180)
result = re.search('type: n3xx', str(SSH.getBefore()))
if result is not None:
logging.debug('Found a N3xx device --> resetting it')
SSH.command('cd ' + self.UESourceCodePath, '\$', 5) SSH.command('cd ' + self.UESourceCodePath, '\$', 5)
# Initialize_OAI_UE_args usually start with -C and followed by the location in repository # Initialize_OAI_UE_args usually start with -C and followed by the location in repository
SSH.command('source oaienv', '\$', 5) SSH.command('source oaienv', '\$', 5)
+9 -9
View File
@@ -43,7 +43,7 @@ from multiprocessing import Process, Lock, SimpleQueue
#----------------------------------------------------------- #-----------------------------------------------------------
# OAI Testing modules # OAI Testing modules
#----------------------------------------------------------- #-----------------------------------------------------------
import sshconnection as SSH import sshconnection as SSH
import helpreadme as HELP import helpreadme as HELP
import constants as CONST import constants as CONST
@@ -66,8 +66,8 @@ class EPCManagement():
self.mmeConfFile = 'mme.conf' self.mmeConfFile = 'mme.conf'
self.yamlPath = '' self.yamlPath = ''
self.isMagmaUsed = False self.isMagmaUsed = False
self.cfgDeploy = '--type start-mini --fqdn yes --scenario 1 --capture /tmp/oai-cn5g-v1.3.pcap' #from xml, 'mini' is default normal for docker-network.py self.cfgDeploy = '--type start-mini --scenario 1 --capture /tmp/oai-cn5g-v1.5.pcap' #from xml, 'mini' is default normal for docker-network.py
self.cfgUnDeploy = '--type stop-mini --fqdn yes --scenario 1' #from xml, 'mini' is default normal for docker-network.py self.cfgUnDeploy = '--type stop-mini --scenario 1' #from xml, 'mini' is default normal for docker-network.py
#----------------------------------------------------------- #-----------------------------------------------------------
@@ -253,18 +253,18 @@ class EPCManagement():
logging.debug('Starting OAI CN5G') logging.debug('Starting OAI CN5G')
mySSH.command('if [ -d ' + self.SourceCodePath + '/scripts ]; then echo ' + self.Password + ' | sudo -S rm -Rf ' + self.SourceCodePath + '/scripts ; fi', '\$', 5) mySSH.command('if [ -d ' + self.SourceCodePath + '/scripts ]; then echo ' + self.Password + ' | sudo -S rm -Rf ' + self.SourceCodePath + '/scripts ; fi', '\$', 5)
mySSH.command('mkdir -p ' + self.SourceCodePath + '/scripts', '\$', 5) mySSH.command('mkdir -p ' + self.SourceCodePath + '/scripts', '\$', 5)
mySSH.command('cd /opt/oai-cn5g-fed-v1.4/docker-compose', '\$', 5) mySSH.command('cd /opt/oai-cn5g-fed-v1.5/docker-compose', '\$', 5)
mySSH.command('python3 ./core-network.py '+self.cfgDeploy, '\$', 60) mySSH.command('python3 ./core-network.py '+self.cfgDeploy, '\$', 60)
if re.search('start-mini-as-ue', self.cfgDeploy): if re.search('start-mini-as-ue', self.cfgDeploy):
dFile = 'docker-compose-mini-nrf-asue.yaml' dFile = 'docker-compose-mini-nrf-asue.yaml'
else: else:
dFile = 'docker-compose-mini-nrf.yaml' dFile = 'docker-compose-mini-nrf.yaml'
mySSH.command('docker-compose -p 5gcn -f ' + dFile + ' ps -a', '\$', 60) mySSH.command('docker-compose -f ' + dFile + ' ps -a', '\$', 60)
if mySSH.getBefore().count('Up (healthy)') != 6: if mySSH.getBefore().count('Up (healthy)') != 6:
logging.error('Not all container healthy') logging.error('Not all container healthy')
else: else:
logging.debug('OK --> all containers are healthy') logging.debug('OK --> all containers are healthy')
mySSH.command('docker-compose -p 5gcn -f ' + dFile + ' config | grep --colour=never image', '\$', 10) mySSH.command('docker-compose -f ' + dFile + ' config | grep --colour=never image', '\$', 10)
listOfImages = mySSH.getBefore() listOfImages = mySSH.getBefore()
for imageLine in listOfImages.split('\\r\\n'): for imageLine in listOfImages.split('\\r\\n'):
res1 = re.search('image: (?P<name>[a-zA-Z0-9\-/]+):(?P<tag>[a-zA-Z0-9\-]+)', str(imageLine)) res1 = re.search('image: (?P<name>[a-zA-Z0-9\-/]+):(?P<tag>[a-zA-Z0-9\-]+)', str(imageLine))
@@ -537,11 +537,11 @@ class EPCManagement():
mySSH.command('docker logs ' + c + ' > ' + self.SourceCodePath + '/logs/' + c + '.log', '\$', 5) mySSH.command('docker logs ' + c + ' > ' + self.SourceCodePath + '/logs/' + c + '.log', '\$', 5)
logging.debug('Terminating OAI CN5G') logging.debug('Terminating OAI CN5G')
mySSH.command('cd /opt/oai-cn5g-fed-v1.4/docker-compose', '\$', 5) mySSH.command('cd /opt/oai-cn5g-fed-v1.5/docker-compose', '\$', 5)
mySSH.command('python3 ./core-network.py '+self.cfgUnDeploy, '\$', 60) mySSH.command('python3 ./core-network.py '+self.cfgUnDeploy, '\$', 60)
mySSH.command('docker volume prune --force || true', '\$', 60) mySSH.command('docker volume prune --force || true', '\$', 60)
time.sleep(2) time.sleep(2)
mySSH.command('tshark -r /tmp/oai-cn5g-v1.3.pcap | egrep --colour=never "Tracking area update" ','\$', 30) mySSH.command('tshark -r /tmp/oai-cn5g-v1.5.pcap | egrep --colour=never "Tracking area update" ','\$', 30)
result = re.search('Tracking area update request', mySSH.getBefore()) result = re.search('Tracking area update request', mySSH.getBefore())
if result is not None: if result is not None:
message = 'UE requested ' + str(mySSH.getBefore().count('Tracking area update request')) + 'Tracking area update request(s)' message = 'UE requested ' + str(mySSH.getBefore().count('Tracking area update request')) + 'Tracking area update request(s)'
@@ -828,7 +828,7 @@ class EPCManagement():
mySSH.command('zip mme.log.zip mme_check_run.*', '\$', 60) mySSH.command('zip mme.log.zip mme_check_run.*', '\$', 60)
elif re.match('OAICN5G', self.Type, re.IGNORECASE): elif re.match('OAICN5G', self.Type, re.IGNORECASE):
mySSH.command('cd ' + self.SourceCodePath + '/logs','\$', 5) mySSH.command('cd ' + self.SourceCodePath + '/logs','\$', 5)
mySSH.command('cp -f /tmp/oai-cn5g-v1.3.pcap .','\$', 30) mySSH.command('cp -f /tmp/oai-cn5g-v1.5.pcap .','\$', 30)
mySSH.command('zip mme.log.zip oai-amf.log oai-nrf.log oai-cn5g*.pcap','\$', 30) mySSH.command('zip mme.log.zip oai-amf.log oai-nrf.log oai-cn5g*.pcap','\$', 30)
mySSH.command('mv mme.log.zip ' + self.SourceCodePath + '/scripts','\$', 30) mySSH.command('mv mme.log.zip ' + self.SourceCodePath + '/scripts','\$', 30)
elif re.match('OAI', self.Type, re.IGNORECASE) or re.match('OAI-Rel14-CUPS', self.Type, re.IGNORECASE): elif re.match('OAI', self.Type, re.IGNORECASE) or re.match('OAI-Rel14-CUPS', self.Type, re.IGNORECASE):
+7
View File
@@ -70,6 +70,7 @@ import subprocess
from multiprocessing import Process, Lock, SimpleQueue from multiprocessing import Process, Lock, SimpleQueue
logging.basicConfig( logging.basicConfig(
level=logging.DEBUG, level=logging.DEBUG,
stream=sys.stdout,
format="[%(asctime)s] %(levelname)8s: %(message)s" format="[%(asctime)s] %(levelname)8s: %(message)s"
) )
@@ -498,6 +499,9 @@ def GetParametersFromXML(action):
string_field = test.findtext('test_svr_id') string_field = test.findtext('test_svr_id')
if (string_field is not None): if (string_field is not None):
CONTAINERS.testSvrId = string_field CONTAINERS.testSvrId = string_field
elif action == 'Custom_Command':
RAN.node = test.findtext('node')
RAN.command = test.findtext('command')
else: else:
logging.warning(f"unknown action {action} from option-parsing point-of-view") logging.warning(f"unknown action {action} from option-parsing point-of-view")
@@ -879,6 +883,9 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE) or re.match('^TestUE$', mode, re
RAN.BuildeNB(HTML) RAN.BuildeNB(HTML)
elif action == 'WaitEndBuild_eNB': elif action == 'WaitEndBuild_eNB':
RAN.WaitBuildeNBisFinished(HTML) RAN.WaitBuildeNBisFinished(HTML)
elif action == 'Custom_Command':
logging.info(f"Executing custom command")
RAN.CustomCommand(HTML)
elif action == 'Initialize_eNB': elif action == 'Initialize_eNB':
check_eNB = False check_eNB = False
check_OAI_UE = False check_OAI_UE = False
+18 -21
View File
@@ -38,6 +38,7 @@ import os
import time import time
from multiprocessing import Process, Lock, SimpleQueue from multiprocessing import Process, Lock, SimpleQueue
import yaml import yaml
import cls_cmd
#----------------------------------------------------------- #-----------------------------------------------------------
@@ -96,6 +97,8 @@ class RANManagement():
#checkers from xml #checkers from xml
self.ran_checkers={} self.ran_checkers={}
self.cmd_prefix = '' # prefix before {lte,nr}-softmodem self.cmd_prefix = '' # prefix before {lte,nr}-softmodem
self.node = ''
self.command = ''
#----------------------------------------------------------- #-----------------------------------------------------------
@@ -259,6 +262,21 @@ class RANManagement():
mySSH.close() mySSH.close()
self.checkBuildeNB(lIpAddr, lUserName, lPassWord, lSourcePath, self.backgroundBuildTestId[int(self.eNB_instance)], HTML) self.checkBuildeNB(lIpAddr, lUserName, lPassWord, lSourcePath, self.backgroundBuildTestId[int(self.eNB_instance)], HTML)
def CustomCommand(self, HTML):
if self.node == '' or self.node == "localhost":
cmd = cls_cmd.LocalCmd()
else:
cmd = cls_cmd.RemoteCmd(self.node)
ret = cmd.run(self.command)
cmd.close()
logging.debug(f'CustomCommand: {self.command} returnCode: {ret.returncode} output: {ret.stdout}')
html_queue = SimpleQueue()
status = 'OK'
if ret.returncode != 0:
html_queue.put(ret.stdout)
status = 'Warning'
HTML.CreateHtmlTestRow(self.command, status, 1, html_queue)
def checkBuildeNB(self, lIpAddr, lUserName, lPassWord, lSourcePath, testcaseId, HTML): def checkBuildeNB(self, lIpAddr, lUserName, lPassWord, lSourcePath, testcaseId, HTML):
HTML.testCase_id=testcaseId HTML.testCase_id=testcaseId
@@ -347,17 +365,6 @@ class RANManagement():
cwd = os.getcwd() cwd = os.getcwd()
mySSH.copyout(lIpAddr,lUserName,lPassWord, cwd + "/active_net_interfaces.awk", "/tmp") mySSH.copyout(lIpAddr,lUserName,lPassWord, cwd + "/active_net_interfaces.awk", "/tmp")
#reboot USRP if requested in xml
if self.USRPIPAddress!='':
logging.debug('USRP '+ self.USRPIPAddress +': reboot request')
mySSH.open(lIpAddr, lUserName, lPassWord)
cmd2usrp='ssh root@'+self.USRPIPAddress+' reboot'
mySSH.command2(cmd2usrp,1)
mySSH.close()
logging.debug('Waiting for USRP to be ready')
time.sleep(120)
if (self.pStatus < 0): if (self.pStatus < 0):
HTML.CreateHtmlTestRow(self.air_interface[self.eNB_instance] + ' ' + self.Initialize_eNB_args, 'KO', self.pStatus) HTML.CreateHtmlTestRow(self.air_interface[self.eNB_instance] + ' ' + self.Initialize_eNB_args, 'KO', self.pStatus)
HTML.CreateHtmlTabFooter(False) HTML.CreateHtmlTabFooter(False)
@@ -419,16 +426,6 @@ class RANManagement():
result = re.search('^rru|^rcc|^du.band', str(config_file)) result = re.search('^rru|^rcc|^du.band', str(config_file))
if result is not None: if result is not None:
rruCheck = True rruCheck = True
# do not reset board twice in IF4.5 case
result = re.search('^rru|^enb|^du.band', str(config_file))
if result is not None:
mySSH.command('echo ' + lPassWord + ' | sudo -S uhd_find_devices', '\$', 180)
result = re.search('type: b200', mySSH.getBefore())
if result is not None:
logging.debug('Found a B2xx device --> resetting it')
mySSH.command('echo ' + lPassWord + ' | sudo -S b2xx_fx3_utils --reset-device', '\$', 10)
# Reloading FGPA bin firmware
mySSH.command('echo ' + lPassWord + ' | sudo -S uhd_find_devices', '\$', 180)
# Make a copy and adapt to EPC / eNB IP addresses # Make a copy and adapt to EPC / eNB IP addresses
mySSH.command('cp ' + full_config_file + ' ' + ci_full_config_file, '\$', 5) mySSH.command('cp ' + full_config_file + ' ' + ci_full_config_file, '\$', 5)
localMmeIpAddr = EPC.MmeIPAddress localMmeIpAddr = EPC.MmeIPAddress
+1
View File
@@ -51,3 +51,4 @@
- Push_Local_Registry - Push_Local_Registry
- Pull_Local_Registry - Pull_Local_Registry
- Clean_Test_Server_Images - Clean_Test_Server_Images
- Custom_Command
@@ -27,12 +27,15 @@ Replaces xml_files/enb_usrp210_band7_test_05mhz_tm1.xml
<htmlTabName>Test-FDD-05MHz-TM1</htmlTabName> <htmlTabName>Test-FDD-05MHz-TM1</htmlTabName>
<htmlTabIcon>tasks</htmlTabIcon> <htmlTabIcon>tasks</htmlTabIcon>
<TestCaseRequestedList> <TestCaseRequestedList>
100000
111110 111110
300000
040101 040101
030101 030101
000001 000001
040301 000001 040501 040603 040604 040605 040606 040607 040641 040642 040643 040644 040401 040201 040301 000001 040501 040603 040604 040605 040606 040607 040641 040642 040643 040644 040401 040201
030201 030201
200000
</TestCaseRequestedList> </TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList> <TestCaseExclusionList></TestCaseExclusionList>
@@ -42,7 +45,24 @@ Replaces xml_files/enb_usrp210_band7_test_05mhz_tm1.xml
<test_svr_id>0</test_svr_id> <test_svr_id>0</test_svr_id>
<images_to_pull>oai-enb</images_to_pull> <images_to_pull>oai-enb</images_to_pull>
</testCase> </testCase>
<testCase id="100000">
<class>Custom_Command</class>
<desc>To reset cpupower</desc>
<node>hutch</node>
<command>sudo cpupower idle-set -D 0</command>
</testCase>
<testCase id="200000">
<class>Custom_Command</class>
<desc>To reset cpupower</desc>
<node>hutch</node>
<command>sudo cpupower idle-set -E</command>
</testCase>
<testCase id="300000">
<class>Custom_Command</class>
<desc>To reset USRP</desc>
<node>hutch</node>
<command>sudo -S b2xx_fx3_utils --reset-device</command>
</testCase>
<testCase id="030101"> <testCase id="030101">
<class>Deploy_Object</class> <class>Deploy_Object</class>
<desc>Deploy eNB (FDD/Band7/5MHz/B200) in a container</desc> <desc>Deploy eNB (FDD/Band7/5MHz/B200) in a container</desc>
@@ -27,11 +27,13 @@ Replaces xml_files/enb_usrp210_band7_test_05mhz_tm1_rrc_inactivity_no_flexran.xm
<htmlTabName>Test-FDD-05MHz-TM1-RRC-Inactivity</htmlTabName> <htmlTabName>Test-FDD-05MHz-TM1-RRC-Inactivity</htmlTabName>
<htmlTabIcon>tasks</htmlTabIcon> <htmlTabIcon>tasks</htmlTabIcon>
<TestCaseRequestedList> <TestCaseRequestedList>
100000
111110 111110
040101 040101
030102 030102
000010 040301 040502 000011 040302 000001 000012 040303 000002 000013 040503 040401 040201 000010 040301 040502 000011 040302 000001 000012 040303 000002 000013 040503 040401 040201
030201 030201
200000
</TestCaseRequestedList> </TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList> <TestCaseExclusionList></TestCaseExclusionList>
@@ -41,6 +43,18 @@ Replaces xml_files/enb_usrp210_band7_test_05mhz_tm1_rrc_inactivity_no_flexran.xm
<test_svr_id>0</test_svr_id> <test_svr_id>0</test_svr_id>
<images_to_pull>oai-enb</images_to_pull> <images_to_pull>oai-enb</images_to_pull>
</testCase> </testCase>
<testCase id="100000">
<class>Custom_Command</class>
<desc>To reset cpupower</desc>
<node>hutch</node>
<command>sudo cpupower idle-set -D 0</command>
</testCase>
<testCase id="200000">
<class>Custom_Command</class>
<desc>To reset cpupower</desc>
<node>hutch</node>
<command>sudo cpupower idle-set -E</command>
</testCase>
<testCase id="030102"> <testCase id="030102">
<class>Deploy_Object</class> <class>Deploy_Object</class>
@@ -28,12 +28,14 @@ Replaces xml_files/enb_usrp210_band7_test_10mhz_tm1.xml
<htmlTabName>Test-FDD-10MHz-TM1</htmlTabName> <htmlTabName>Test-FDD-10MHz-TM1</htmlTabName>
<htmlTabIcon>tasks</htmlTabIcon> <htmlTabIcon>tasks</htmlTabIcon>
<TestCaseRequestedList> <TestCaseRequestedList>
100000
111110 111110
040101 040101
030111 030111
000001 000001
040301 040511 040613 040614 040615 040651 040652 040653 040654 040401 040201 040301 040511 040613 040614 040615 040651 040652 040653 040654 040401 040201
030201 030201
200000
</TestCaseRequestedList> </TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList> <TestCaseExclusionList></TestCaseExclusionList>
@@ -43,6 +45,18 @@ Replaces xml_files/enb_usrp210_band7_test_10mhz_tm1.xml
<test_svr_id>0</test_svr_id> <test_svr_id>0</test_svr_id>
<images_to_pull>oai-enb</images_to_pull> <images_to_pull>oai-enb</images_to_pull>
</testCase> </testCase>
<testCase id="100000">
<class>Custom_Command</class>
<desc>To reset cpupower</desc>
<node>hutch</node>
<command>sudo cpupower idle-set -D 0</command>
</testCase>
<testCase id="200000">
<class>Custom_Command</class>
<desc>To reset cpupower</desc>
<node>hutch</node>
<command>sudo cpupower idle-set -E</command>
</testCase>
<testCase id="030111"> <testCase id="030111">
<class>Deploy_Object</class> <class>Deploy_Object</class>
@@ -27,11 +27,13 @@ Replaces xml_files/enb_usrp210_band7_test_10mhz_tm1.xml
<htmlTabName>Test-FDD-10MHz-CDRX-TM1</htmlTabName> <htmlTabName>Test-FDD-10MHz-CDRX-TM1</htmlTabName>
<htmlTabIcon>tasks</htmlTabIcon> <htmlTabIcon>tasks</htmlTabIcon>
<TestCaseRequestedList> <TestCaseRequestedList>
100000
111110 111110
040101 040101
030112 030112
040301 040512 040612 040650 040401 040201 040301 040512 040612 040650 040401 040201
030201 030201
200000
</TestCaseRequestedList> </TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList> <TestCaseExclusionList></TestCaseExclusionList>
@@ -41,6 +43,18 @@ Replaces xml_files/enb_usrp210_band7_test_10mhz_tm1.xml
<test_svr_id>0</test_svr_id> <test_svr_id>0</test_svr_id>
<images_to_pull>oai-enb</images_to_pull> <images_to_pull>oai-enb</images_to_pull>
</testCase> </testCase>
<testCase id="100000">
<class>Custom_Command</class>
<desc>To reset cpupower</desc>
<node>hutch</node>
<command>sudo cpupower idle-set -D 0</command>
</testCase>
<testCase id="200000">
<class>Custom_Command</class>
<desc>To reset cpupower</desc>
<node>hutch</node>
<command>sudo cpupower idle-set -E</command>
</testCase>
<testCase id="030112"> <testCase id="030112">
<class>Deploy_Object</class> <class>Deploy_Object</class>
@@ -27,12 +27,14 @@ Replaces xml_files/enb_usrp210_band7_test_10mhz_tm1.xml
<htmlTabName>Test-FDD-20MHz-TM1</htmlTabName> <htmlTabName>Test-FDD-20MHz-TM1</htmlTabName>
<htmlTabIcon>tasks</htmlTabIcon> <htmlTabIcon>tasks</htmlTabIcon>
<TestCaseRequestedList> <TestCaseRequestedList>
100000
111110 111110
040101 040101
030121 030121
000001 000001
040301 040521 040623 040624 040625 040662 040401 040201 040301 040521 040623 040624 040625 040662 040401 040201
030201 030201
200000
</TestCaseRequestedList> </TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList> <TestCaseExclusionList></TestCaseExclusionList>
@@ -42,6 +44,18 @@ Replaces xml_files/enb_usrp210_band7_test_10mhz_tm1.xml
<test_svr_id>0</test_svr_id> <test_svr_id>0</test_svr_id>
<images_to_pull>oai-enb</images_to_pull> <images_to_pull>oai-enb</images_to_pull>
</testCase> </testCase>
<testCase id="100000">
<class>Custom_Command</class>
<desc>To reset cpupower</desc>
<node>hutch</node>
<command>sudo cpupower idle-set -D 0</command>
</testCase>
<testCase id="200000">
<class>Custom_Command</class>
<desc>To reset cpupower</desc>
<node>hutch</node>
<command>sudo cpupower idle-set -E</command>
</testCase>
<testCase id="030121"> <testCase id="030121">
<class>Deploy_Object</class> <class>Deploy_Object</class>
@@ -27,11 +27,13 @@ Replaces xml_files/enb_usrp210_band40_test_05mhz_tm1.xml
<htmlTabName>Test-TDD-05MHz-TM1</htmlTabName> <htmlTabName>Test-TDD-05MHz-TM1</htmlTabName>
<htmlTabIcon>tasks</htmlTabIcon> <htmlTabIcon>tasks</htmlTabIcon>
<TestCaseRequestedList> <TestCaseRequestedList>
100000
111110 111110
040101 040101
030104 030104
040301 040501 040602 040601 040603 040604 040605 040642 040641 040643 040644 040645 040401 040201 040301 040501 040602 040601 040603 040604 040605 040642 040641 040643 040644 040645 040401 040201
030201 030201
200000
</TestCaseRequestedList> </TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList> <TestCaseExclusionList></TestCaseExclusionList>
@@ -41,6 +43,18 @@ Replaces xml_files/enb_usrp210_band40_test_05mhz_tm1.xml
<test_svr_id>0</test_svr_id> <test_svr_id>0</test_svr_id>
<images_to_pull>oai-enb</images_to_pull> <images_to_pull>oai-enb</images_to_pull>
</testCase> </testCase>
<testCase id="100000">
<class>Custom_Command</class>
<desc>To reset cpupower</desc>
<node>starsky</node>
<command>sudo cpupower idle-set -D 0</command>
</testCase>
<testCase id="200000">
<class>Custom_Command</class>
<desc>To reset cpupower</desc>
<node>starsky</node>
<command>sudo cpupower idle-set -E</command>
</testCase>
<testCase id="030104"> <testCase id="030104">
<class>Deploy_Object</class> <class>Deploy_Object</class>
@@ -27,11 +27,13 @@ Replaces xml_files/enb_usrp210_band40_test_05mhz_tm2.xml
<htmlTabName>Test-TDD-05MHz-TM2</htmlTabName> <htmlTabName>Test-TDD-05MHz-TM2</htmlTabName>
<htmlTabIcon>tasks</htmlTabIcon> <htmlTabIcon>tasks</htmlTabIcon>
<TestCaseRequestedList> <TestCaseRequestedList>
100000
111110 111110
040101 040101
030105 030105
040301 040502 040606 040608 040646 040648 040401 040201 040301 040502 040606 040608 040646 040648 040401 040201
030201 030201
200000
</TestCaseRequestedList> </TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList> <TestCaseExclusionList></TestCaseExclusionList>
@@ -41,7 +43,18 @@ Replaces xml_files/enb_usrp210_band40_test_05mhz_tm2.xml
<test_svr_id>0</test_svr_id> <test_svr_id>0</test_svr_id>
<images_to_pull>oai-enb</images_to_pull> <images_to_pull>oai-enb</images_to_pull>
</testCase> </testCase>
<testCase id="100000">
<class>Custom_Command</class>
<desc>To reset cpupower</desc>
<node>starsky</node>
<command>sudo cpupower idle-set -D 0</command>
</testCase>
<testCase id="200000">
<class>Custom_Command</class>
<desc>To reset cpupower</desc>
<node>starsky</node>
<command>sudo cpupower idle-set -E</command>
</testCase>
<testCase id="030105"> <testCase id="030105">
<class>Deploy_Object</class> <class>Deploy_Object</class>
<desc>Deploy eNB (TDD/Band40/5MHz/B200) in a container</desc> <desc>Deploy eNB (TDD/Band40/5MHz/B200) in a container</desc>
@@ -27,11 +27,13 @@ Replaces xml_files/enb_usrp210_band40_test_10mhz_tm1.xml
<htmlTabName>Test-TDD-10MHz-TM1</htmlTabName> <htmlTabName>Test-TDD-10MHz-TM1</htmlTabName>
<htmlTabIcon>tasks</htmlTabIcon> <htmlTabIcon>tasks</htmlTabIcon>
<TestCaseRequestedList> <TestCaseRequestedList>
100000
111110 111110
040101 040101
030114 030114
040301 040511 040612 040611 040613 040614 040615 040652 040651 040653 040654 040655 040401 040201 040301 040511 040612 040611 040613 040614 040615 040652 040651 040653 040654 040655 040401 040201
030201 030201
200000
</TestCaseRequestedList> </TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList> <TestCaseExclusionList></TestCaseExclusionList>
@@ -41,7 +43,18 @@ Replaces xml_files/enb_usrp210_band40_test_10mhz_tm1.xml
<test_svr_id>0</test_svr_id> <test_svr_id>0</test_svr_id>
<images_to_pull>oai-enb</images_to_pull> <images_to_pull>oai-enb</images_to_pull>
</testCase> </testCase>
<testCase id="100000">
<class>Custom_Command</class>
<desc>To reset cpupower</desc>
<node>starsky</node>
<command>sudo cpupower idle-set -D 0</command>
</testCase>
<testCase id="200000">
<class>Custom_Command</class>
<desc>To reset cpupower</desc>
<node>starsky</node>
<command>sudo cpupower idle-set -E</command>
</testCase>
<testCase id="030114"> <testCase id="030114">
<class>Deploy_Object</class> <class>Deploy_Object</class>
<desc>Deploy eNB (TDD/Band40/10MHz/B200) in a container</desc> <desc>Deploy eNB (TDD/Band40/10MHz/B200) in a container</desc>
@@ -27,11 +27,13 @@ Replaces xml_files/enb_usrp210_band40_test_20mhz_tm1.xml
<htmlTabName>Test-TDD-20MHz-TM1</htmlTabName> <htmlTabName>Test-TDD-20MHz-TM1</htmlTabName>
<htmlTabIcon>tasks</htmlTabIcon> <htmlTabIcon>tasks</htmlTabIcon>
<TestCaseRequestedList> <TestCaseRequestedList>
100000
111110 111110
040101 040101
030124 030124
040301 040521 040622 040621 040623 040662 040401 040201 040301 040521 040622 040621 040623 040662 040401 040201
030201 030201
200000
</TestCaseRequestedList> </TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList> <TestCaseExclusionList></TestCaseExclusionList>
@@ -41,7 +43,18 @@ Replaces xml_files/enb_usrp210_band40_test_20mhz_tm1.xml
<test_svr_id>0</test_svr_id> <test_svr_id>0</test_svr_id>
<images_to_pull>oai-enb</images_to_pull> <images_to_pull>oai-enb</images_to_pull>
</testCase> </testCase>
<testCase id="100000">
<class>Custom_Command</class>
<desc>To reset cpupower</desc>
<node>starsky</node>
<command>sudo cpupower idle-set -D 0</command>
</testCase>
<testCase id="200000">
<class>Custom_Command</class>
<desc>To reset cpupower</desc>
<node>starsky</node>
<command>sudo cpupower idle-set -E</command>
</testCase>
<testCase id="030124"> <testCase id="030124">
<class>Deploy_Object</class> <class>Deploy_Object</class>
<desc>Deploy eNB (TDD/Band40/20MHz/B200) in a container</desc> <desc>Deploy eNB (TDD/Band40/20MHz/B200) in a container</desc>
@@ -27,11 +27,13 @@ Replaces xml_files/enb_usrp210_band40_test_20mhz_tm1_default_scheduler.xml
<htmlTabName>Test-TDD-20MHz-TM1-Default-Scheduler</htmlTabName> <htmlTabName>Test-TDD-20MHz-TM1-Default-Scheduler</htmlTabName>
<htmlTabIcon>tasks</htmlTabIcon> <htmlTabIcon>tasks</htmlTabIcon>
<TestCaseRequestedList> <TestCaseRequestedList>
100000
111110 111110
040101 040101
030125 030125
040301 040522 040627 040626 040628 040629 040630 040667 040666 040668 040669 040670 040401 040201 040301 040522 040627 040626 040628 040629 040630 040667 040666 040668 040669 040670 040401 040201
030201 030201
200000
</TestCaseRequestedList> </TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList> <TestCaseExclusionList></TestCaseExclusionList>
@@ -41,7 +43,18 @@ Replaces xml_files/enb_usrp210_band40_test_20mhz_tm1_default_scheduler.xml
<test_svr_id>0</test_svr_id> <test_svr_id>0</test_svr_id>
<images_to_pull>oai-enb</images_to_pull> <images_to_pull>oai-enb</images_to_pull>
</testCase> </testCase>
<testCase id="100000">
<class>Custom_Command</class>
<desc>To reset cpupower</desc>
<node>starsky</node>
<command>sudo cpupower idle-set -D 0</command>
</testCase>
<testCase id="200000">
<class>Custom_Command</class>
<desc>To reset cpupower</desc>
<node>starsky</node>
<command>sudo cpupower idle-set -E</command>
</testCase>
<testCase id="030125"> <testCase id="030125">
<class>Deploy_Object</class> <class>Deploy_Object</class>
<desc>Deploy eNB (TDD/Band40/20MHz/B200) in a container</desc> <desc>Deploy eNB (TDD/Band40/20MHz/B200) in a container</desc>
@@ -26,6 +26,9 @@
<htmlTabIcon>tasks</htmlTabIcon> <htmlTabIcon>tasks</htmlTabIcon>
<repeatCount>1</repeatCount> <repeatCount>1</repeatCount>
<TestCaseRequestedList> <TestCaseRequestedList>
200000
100000
500000
111110 111110
111111 111111
000001 000001
@@ -47,6 +50,8 @@
000001 000001
030202 030202
030201 030201
300000
600000
</TestCaseRequestedList> </TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList> <TestCaseExclusionList></TestCaseExclusionList>
@@ -69,7 +74,36 @@
<desc>Initialize Quectel</desc> <desc>Initialize Quectel</desc>
<id>idefix</id> <id>idefix</id>
</testCase> </testCase>
<testCase id = "100000">
<class>Custom_Command</class>
<desc>To reset USRP</desc>
<node>nepes</node>
<command>sudo -S b2xx_fx3_utils --reset-device</command>
</testCase>
<testCase id="200000">
<class>Custom_Command</class>
<desc>To reset cpupower - nepes</desc>
<node>nepes</node>
<command>sudo cpupower idle-set -D 0</command>
</testCase>
<testCase id="300000">
<class>Custom_Command</class>
<desc>To reset cpupower - nepes</desc>
<node>nepes</node>
<command>sudo cpupower idle-set -E</command>
</testCase>
<testCase id="500000">
<class>Custom_Command</class>
<desc>To reset cpupower - obelix</desc>
<node>obelix</node>
<command>sudo cpupower idle-set -D 0</command>
</testCase>
<testCase id="600000">
<class>Custom_Command</class>
<desc>To reset cpupower - obelix</desc>
<node>obelix</node>
<command>sudo cpupower idle-set -E</command>
</testCase>
<testCase id="010002"> <testCase id="010002">
<class>Terminate_UE</class> <class>Terminate_UE</class>
@@ -26,6 +26,7 @@
<htmlTabIcon>tasks</htmlTabIcon> <htmlTabIcon>tasks</htmlTabIcon>
<repeatCount>1</repeatCount> <repeatCount>1</repeatCount>
<TestCaseRequestedList> <TestCaseRequestedList>
100000
111111 111111
010002 010002
030101 030101
@@ -39,6 +40,7 @@
010002 010002
000001 000001
030201 030201
200000
</TestCaseRequestedList> </TestCaseRequestedList>
<!-- <!--
070002 070002
@@ -66,7 +68,18 @@
<desc>Terminate Quectel</desc> <desc>Terminate Quectel</desc>
<id>idefix</id> <id>idefix</id>
</testCase> </testCase>
<testCase id="100000">
<class>Custom_Command</class>
<desc>To reset cpupower - nepes</desc>
<node>nepes</node>
<command>sudo cpupower idle-set -D 0</command>
</testCase>
<testCase id="200000">
<class>Custom_Command</class>
<desc>To reset cpupower - nepes</desc>
<node>nepes</node>
<command>sudo cpupower idle-set -E</command>
</testCase>
<testCase id="030101"> <testCase id="030101">
<class>Deploy_Object</class> <class>Deploy_Object</class>
<desc>Deploy gNB (TDD/Band78/40MHz/B200) in a container</desc> <desc>Deploy gNB (TDD/Band78/40MHz/B200) in a container</desc>
@@ -26,6 +26,7 @@
<htmlTabIcon>tasks</htmlTabIcon> <htmlTabIcon>tasks</htmlTabIcon>
<repeatCount>1</repeatCount> <repeatCount>1</repeatCount>
<TestCaseRequestedList> <TestCaseRequestedList>
100000
110002 110002
130101 130101
130102 130102
@@ -37,6 +38,7 @@
110002 110002
100001 100001
130201 130201
200000
</TestCaseRequestedList> </TestCaseRequestedList>
<!-- <!--
070001 070001
@@ -77,7 +79,18 @@
<eNB_serverId>0</eNB_serverId> <eNB_serverId>0</eNB_serverId>
<services>gnb_du_tdd</services> <services>gnb_du_tdd</services>
</testCase> </testCase>
<testCase id="100000">
<class>Custom_Command</class>
<desc>To reset cpupower</desc>
<node>nepes</node>
<command>sudo cpupower idle-set -D 0</command>
</testCase>
<testCase id="200000">
<class>Custom_Command</class>
<desc>To reset cpupower</desc>
<node>nepes</node>
<command>sudo cpupower idle-set -E</command>
</testCase>
<testCase id="100001"> <testCase id="100001">
<class>IdleSleep</class> <class>IdleSleep</class>
<desc>Sleep</desc> <desc>Sleep</desc>
+8
View File
@@ -25,6 +25,7 @@
<htmlTabName>Build</htmlTabName> <htmlTabName>Build</htmlTabName>
<htmlTabIcon>wrench</htmlTabIcon> <htmlTabIcon>wrench</htmlTabIcon>
<TestCaseRequestedList> <TestCaseRequestedList>
100000
000001 000001
000002 000002
</TestCaseRequestedList> </TestCaseRequestedList>
@@ -47,4 +48,11 @@
<eNB_serverId>0</eNB_serverId> <eNB_serverId>0</eNB_serverId>
</testCase> </testCase>
<testCase id="100000">
<class>Custom_Command</class>
<desc>To reboot USRP</desc>
<node>obelix</node>
<command>ssh root@172.21.19.13 reboot ; sleep 45 </command>
</testCase>
</testCaseList> </testCaseList>
+35 -1
View File
@@ -26,7 +26,10 @@
<htmlTabIcon>tasks</htmlTabIcon> <htmlTabIcon>tasks</htmlTabIcon>
<repeatCount>1</repeatCount> <repeatCount>1</repeatCount>
<TestCaseRequestedList> <TestCaseRequestedList>
100000
700000
010002 010002
300000
030000 030000
040000 040000
000002 000002
@@ -42,6 +45,8 @@
010002 010002
080001 080001
080000 080000
200000
800000
</TestCaseRequestedList> </TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList> <TestCaseExclusionList></TestCaseExclusionList>
@@ -51,6 +56,30 @@
<id>nrmodule2_quectel</id> <id>nrmodule2_quectel</id>
<UE_Trace>yes</UE_Trace> <UE_Trace>yes</UE_Trace>
</testCase> </testCase>
<testCase id="100000">
<class>Custom_Command</class>
<desc>To reset cpupower - obelix</desc>
<node>obelix</node>
<command>sudo cpupower idle-set -D 0</command>
</testCase>
<testCase id="200000">
<class>Custom_Command</class>
<desc>To reset cpupower - obelix</desc>
<node>obelix</node>
<command>sudo cpupower idle-set -E</command>
</testCase>
<testCase id="700000">
<class>Custom_Command</class>
<desc>To reset cpupower - asterix</desc>
<node>asterix</node>
<command>sudo cpupower idle-set -D 0</command>
</testCase>
<testCase id="800000">
<class>Custom_Command</class>
<desc>To reset cpupower - asterix</desc>
<node>asterix</node>
<command>sudo cpupower idle-set -E</command>
</testCase>
<testCase id="010002"> <testCase id="010002">
@@ -84,7 +113,12 @@
<rt_stats_cfg>datalog_rt_stats.2x2.yaml</rt_stats_cfg> <rt_stats_cfg>datalog_rt_stats.2x2.yaml</rt_stats_cfg>
<USRP_IPAddress>172.21.19.14</USRP_IPAddress> <USRP_IPAddress>172.21.19.14</USRP_IPAddress>
</testCase> </testCase>
<testCase id = "300000">
<class>Custom_Command</class>
<desc>To reboot USRP</desc>
<node>asterix</node>
<command>ssh root@172.21.19.14 reboot ; sleep 45</command>
</testCase>
<testCase id="000001"> <testCase id="000001">
<class>IdleSleep</class> <class>IdleSleep</class>
<desc>Sleep</desc> <desc>Sleep</desc>
@@ -26,6 +26,8 @@
<htmlTabIcon>tasks</htmlTabIcon> <htmlTabIcon>tasks</htmlTabIcon>
<repeatCount>1</repeatCount> <repeatCount>1</repeatCount>
<TestCaseRequestedList> <TestCaseRequestedList>
100000
300000
010002 010002
031000 031000
041000 041000
@@ -49,6 +51,8 @@
010002 010002
080001 080001
080000 080000
200000
400000
</TestCaseRequestedList> </TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList> <TestCaseExclusionList></TestCaseExclusionList>
@@ -78,6 +82,31 @@
<id>nrmodule2_quectel</id> <id>nrmodule2_quectel</id>
</testCase> </testCase>
<testCase id="100000">
<class>Custom_Command</class>
<desc>To reset cpupower - asterix</desc>
<node>asterix</node>
<command>sudo cpupower idle-set -D 0</command>
</testCase>
<testCase id="200000">
<class>Custom_Command</class>
<desc>To reset cpupower - asterix</desc>
<node>asterix</node>
<command>sudo cpupower idle-set -E</command>
</testCase>
<testCase id="300000">
<class>Custom_Command</class>
<desc>To reset cpupower - obelix</desc>
<node>obelix</node>
<command>sudo cpupower idle-set -D 0</command>
</testCase>
<testCase id="400000">
<class>Custom_Command</class>
<desc>To reset cpupower - obelix</desc>
<node>obelix</node>
<command>sudo cpupower idle-set -E</command>
</testCase>
<testCase id="031000"> <testCase id="031000">
<class>Initialize_eNB</class> <class>Initialize_eNB</class>
+35
View File
@@ -26,6 +26,9 @@
<htmlTabIcon>tasks</htmlTabIcon> <htmlTabIcon>tasks</htmlTabIcon>
<repeatCount>1</repeatCount> <repeatCount>1</repeatCount>
<TestCaseRequestedList> <TestCaseRequestedList>
100000
200000
400000
010002 010002
030000 030000
040000 040000
@@ -43,6 +46,8 @@
010002 010002
080001 080001
080000 080000
300000
500000
</TestCaseRequestedList> </TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList> <TestCaseExclusionList></TestCaseExclusionList>
@@ -52,12 +57,42 @@
<id>idefix</id> <id>idefix</id>
<UE_Trace>yes</UE_Trace> <UE_Trace>yes</UE_Trace>
</testCase> </testCase>
<testCase id="100000">
<class>Custom_Command</class>
<desc>To reset USRP</desc>
<node>obelix</node>
<command>sudo -S b2xx_fx3_utils --reset-device</command>
</testCase>
<testCase id="010002"> <testCase id="010002">
<class>Terminate_UE</class> <class>Terminate_UE</class>
<desc>Terminate Quectel</desc> <desc>Terminate Quectel</desc>
<id>idefix</id> <id>idefix</id>
</testCase> </testCase>
<testCase id="200000">
<class>Custom_Command</class>
<desc>To reset cpupower - obelix</desc>
<node>obelix</node>
<command>sudo cpupower idle-set -D 0</command>
</testCase>
<testCase id="300000">
<class>Custom_Command</class>
<desc>To reset cpupower - obelix</desc>
<node>obelix</node>
<command>sudo cpupower idle-set -E</command>
</testCase>
<testCase id="400000">
<class>Custom_Command</class>
<desc>To reset cpupower - nepes</desc>
<node>nepes</node>
<command>sudo cpupower idle-set -D 0</command>
</testCase>
<testCase id="500000">
<class>Custom_Command</class>
<desc>To reset cpupower - nepes</desc>
<node>nepes</node>
<command>sudo cpupower idle-set -E</command>
</testCase>
<testCase id="030000"> <testCase id="030000">
<class>Initialize_eNB</class> <class>Initialize_eNB</class>
@@ -26,12 +26,14 @@
<htmlTabIcon>tasks</htmlTabIcon> <htmlTabIcon>tasks</htmlTabIcon>
<repeatCount>1</repeatCount> <repeatCount>1</repeatCount>
<TestCaseRequestedList> <TestCaseRequestedList>
100000
040000 040000
000001 000001
010000 010000
000002 000002
050000 050000
080000 080000
200000
</TestCaseRequestedList> </TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList> <TestCaseExclusionList></TestCaseExclusionList>
@@ -40,6 +42,18 @@
<desc>Run AS UE Scenario</desc> <desc>Run AS UE Scenario</desc>
<id>amarisoft_ue_1</id> <id>amarisoft_ue_1</id>
</testCase> </testCase>
<testCase id="100000">
<class>Custom_Command</class>
<desc>To reset cpupower</desc>
<node>asterix</node>
<command>sudo cpupower idle-set -D 0</command>
</testCase>
<testCase id="200000">
<class>Custom_Command</class>
<desc>To reset cpupower</desc>
<node>asterix</node>
<command>sudo cpupower idle-set -E</command>
</testCase>
<testCase id="040000"> <testCase id="040000">
+14 -1
View File
@@ -26,6 +26,7 @@
<htmlTabIcon>tasks</htmlTabIcon> <htmlTabIcon>tasks</htmlTabIcon>
<repeatCount>1</repeatCount> <repeatCount>1</repeatCount>
<TestCaseRequestedList> <TestCaseRequestedList>
100000
040000 040000
000002 000002
010000 010000
@@ -35,6 +36,7 @@
000001 000001
010002 010002
080000 080000
200000
</TestCaseRequestedList> </TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList> <TestCaseExclusionList></TestCaseExclusionList>
@@ -49,7 +51,18 @@
<class>Terminate_OAI_UE</class> <class>Terminate_OAI_UE</class>
<desc>Terminate OAI UE</desc> <desc>Terminate OAI UE</desc>
</testCase> </testCase>
<testCase id="100000">
<class>Custom_Command</class>
<desc>To reset cpupower</desc>
<node>asterix</node>
<command>sudo cpupower idle-set -D 0</command>
</testCase>
<testCase id="200000">
<class>Custom_Command</class>
<desc>To reset cpupower</desc>
<node>asterix</node>
<command>sudo cpupower idle-set -E</command>
</testCase>
<testCase id="040000"> <testCase id="040000">
<class>Initialize_eNB</class> <class>Initialize_eNB</class>
+21 -1
View File
@@ -26,7 +26,9 @@
<htmlTabIcon>tasks</htmlTabIcon> <htmlTabIcon>tasks</htmlTabIcon>
<repeatCount>1</repeatCount> <repeatCount>1</repeatCount>
<TestCaseRequestedList> <TestCaseRequestedList>
100000
010002 010002
300000
040000 040000
000002 000002
010000 010000
@@ -43,6 +45,7 @@
000001 000001
010002 010002
080000 080000
200000
</TestCaseRequestedList> </TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList> <TestCaseExclusionList></TestCaseExclusionList>
@@ -59,7 +62,24 @@
<desc>Terminate Quectel</desc> <desc>Terminate Quectel</desc>
<id>nrmodule2_quectel</id> <id>nrmodule2_quectel</id>
</testCase> </testCase>
<testCase id="100000">
<class>Custom_Command</class>
<desc>To reset cpupower</desc>
<node>asterix</node>
<command>sudo cpupower idle-set -D 0</command>
</testCase>
<testCase id="200000">
<class>Custom_Command</class>
<desc>To reset cpupower</desc>
<node>asterix</node>
<command>sudo cpupower idle-set -E</command>
</testCase>
<testCase id="300000">
<class>Custom_Command</class>
<desc>To reboot USRP</desc>
<node>asterix</node>
<command>ssh root@172.21.19.14 reboot ; sleep 45</command>
</testCase>
<testCase id="040000"> <testCase id="040000">
<class>Initialize_eNB</class> <class>Initialize_eNB</class>
+14 -1
View File
@@ -26,6 +26,7 @@
<htmlTabIcon>tasks</htmlTabIcon> <htmlTabIcon>tasks</htmlTabIcon>
<repeatCount>1</repeatCount> <repeatCount>1</repeatCount>
<TestCaseRequestedList> <TestCaseRequestedList>
100000
010002 010002
042000 042000
000002 000002
@@ -41,6 +42,7 @@
000001 000001
010002 010002
080000 080000
200000
</TestCaseRequestedList> </TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList> <TestCaseExclusionList></TestCaseExclusionList>
@@ -72,7 +74,18 @@
<USRP_IPAddress>172.21.19.14</USRP_IPAddress> <USRP_IPAddress>172.21.19.14</USRP_IPAddress>
<cmd_prefix>numactl --cpunodebind=netdev:ens2f0np0 --membind=netdev:ens2f0np0</cmd_prefix> <cmd_prefix>numactl --cpunodebind=netdev:ens2f0np0 --membind=netdev:ens2f0np0</cmd_prefix>
</testCase> </testCase>
<testCase id="100000">
<class>Custom_Command</class>
<desc>To reset cpupower</desc>
<node>asterix</node>
<command>sudo cpupower idle-set -D 0</command>
</testCase>
<testCase id="200000">
<class>Custom_Command</class>
<desc>To reset cpupower</desc>
<node>asterix</node>
<command>sudo cpupower idle-set -E</command>
</testCase>
<testCase id="000001"> <testCase id="000001">
<class>IdleSleep</class> <class>IdleSleep</class>
<desc>Sleep</desc> <desc>Sleep</desc>
+14 -2
View File
@@ -27,6 +27,7 @@
<repeatCount>1</repeatCount> <repeatCount>1</repeatCount>
<TestCaseRequestedList> <TestCaseRequestedList>
011002 011002
100000
041000 041000
000002 000002
011000 011000
@@ -47,6 +48,7 @@
000001 000001
011002 011002
081000 081000
200000
</TestCaseRequestedList> </TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList> <TestCaseExclusionList></TestCaseExclusionList>
@@ -56,8 +58,18 @@
<id>nrmodule2_quectel</id> <id>nrmodule2_quectel</id>
<UE_Trace>yes</UE_Trace> <UE_Trace>yes</UE_Trace>
</testCase> </testCase>
<testCase id="100000">
<class>Custom_Command</class>
<desc>To reset cpupower</desc>
<node>asterix</node>
<command>sudo cpupower idle-set -D 0</command>
</testCase>
<testCase id="200000">
<class>Custom_Command</class>
<desc>To reset cpupower</desc>
<node>asterix</node>
<command>sudo cpupower idle-set -E</command>
</testCase>
<testCase id="011002"> <testCase id="011002">
<class>Terminate_UE</class> <class>Terminate_UE</class>
<desc>Terminate Quectel</desc> <desc>Terminate Quectel</desc>
+13 -1
View File
@@ -26,9 +26,21 @@
<htmlTabIcon>tasks</htmlTabIcon> <htmlTabIcon>tasks</htmlTabIcon>
<repeatCount>1</repeatCount> <repeatCount>1</repeatCount>
<TestCaseRequestedList> <TestCaseRequestedList>
090101 000001 090109 100000 090101 000001 090109 200000
</TestCaseRequestedList> </TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList> <TestCaseExclusionList></TestCaseExclusionList>
<testCase id = "100000">
<class>Custom_Command</class>
<desc>To reset cpupower</desc>
<node>caracal</node>
<command>sudo cpupower idle-set -D 0</command>
</testCase>
<testCase id = "200000">
<class>Custom_Command</class>
<desc>To reset cpupower</desc>
<node>caracal</node>
<command>sudo cpupower idle-set -E</command>
</testCase>
<testCase id="090101"> <testCase id="090101">
<class>Initialize_eNB</class> <class>Initialize_eNB</class>
@@ -26,9 +26,21 @@
<htmlTabIcon>tasks</htmlTabIcon> <htmlTabIcon>tasks</htmlTabIcon>
<repeatCount>1</repeatCount> <repeatCount>1</repeatCount>
<TestCaseRequestedList> <TestCaseRequestedList>
190101 000001 190109 100000 190101 000001 190109 200000
</TestCaseRequestedList> </TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList> <TestCaseExclusionList></TestCaseExclusionList>
<testCase id = "100000">
<class>Custom_Command</class>
<desc>To reset cpupower</desc>
<node>caracal</node>
<command>sudo cpupower idle-set -D 0</command>
</testCase>
<testCase id = "200000">
<class>Custom_Command</class>
<desc>To reset cpupower</desc>
<node>caracal</node>
<command>sudo cpupower idle-set -E</command>
</testCase>
<testCase id="190101"> <testCase id="190101">
<class>Initialize_eNB</class> <class>Initialize_eNB</class>
@@ -29,6 +29,18 @@
290101 000001 290109 290101 000001 290109
</TestCaseRequestedList> </TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList> <TestCaseExclusionList></TestCaseExclusionList>
<testCase id="100000">
<class>Custom_Command</class>
<desc>To reset cpupower</desc>
<node>caracal</node>
<command>sudo cpupower idle-set -D 0</command>
</testCase>
<testCase id="200000">
<class>Custom_Command</class>
<desc>To reset cpupower</desc>
<node>caracal</node>
<command>sudo cpupower idle-set -E</command>
</testCase>
<testCase id="290101"> <testCase id="290101">
<class>Initialize_eNB</class> <class>Initialize_eNB</class>
+9 -1
View File
@@ -26,6 +26,7 @@
<htmlTabIcon>wrench</htmlTabIcon> <htmlTabIcon>wrench</htmlTabIcon>
<repeatCount>1</repeatCount> <repeatCount>1</repeatCount>
<TestCaseRequestedList> <TestCaseRequestedList>
100000
010101 010101
</TestCaseRequestedList> </TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList> <TestCaseExclusionList></TestCaseExclusionList>
@@ -34,8 +35,15 @@
<mode>TesteNB</mode> <mode>TesteNB</mode>
<class>Build_eNB</class> <class>Build_eNB</class>
<desc>Build gNB (USRP)</desc> <desc>Build gNB (USRP)</desc>
<Build_eNB_args>--gNB -w USRP --ninja -c -P</Build_eNB_args> <Build_eNB_args>--gNB -w USRP --ninja -c -P --build-lib "ldpc_cuda"</Build_eNB_args>
<forced_workspace_cleanup>True</forced_workspace_cleanup> <forced_workspace_cleanup>True</forced_workspace_cleanup>
</testCase> </testCase>
<testCase id="100000">
<class>Custom_Command</class>
<desc>To reboot USRP</desc>
<node>caracal</node>
<command>ssh root@192.168.20.2 reboot</command>
</testCase>
</testCaseList> </testCaseList>
+14 -1
View File
@@ -26,6 +26,7 @@
<htmlTabIcon>tasks</htmlTabIcon> <htmlTabIcon>tasks</htmlTabIcon>
<repeatCount>1</repeatCount> <repeatCount>1</repeatCount>
<TestCaseRequestedList> <TestCaseRequestedList>
100000
010002 010002
030000 030000
000002 000002
@@ -39,9 +40,21 @@
000001 000001
010002 010002
080000 080000
200000
</TestCaseRequestedList> </TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList> <TestCaseExclusionList></TestCaseExclusionList>
<testCase id="100000">
<class>Custom_Command</class>
<desc>To reset cpupower</desc>
<node>obelix</node>
<command>sudo cpupower idle-set -D 0</command>
</testCase>
<testCase id="200000">
<class>Custom_Command</class>
<desc>To reset cpupower</desc>
<node>obelix</node>
<command>sudo cpupower idle-set -E</command>
</testCase>
<testCase id="010000"> <testCase id="010000">
<class>Initialize_UE</class> <class>Initialize_UE</class>
<desc>Initialize Quectel</desc> <desc>Initialize Quectel</desc>
@@ -26,6 +26,7 @@
<htmlTabIcon>tasks</htmlTabIcon> <htmlTabIcon>tasks</htmlTabIcon>
<repeatCount>1</repeatCount> <repeatCount>1</repeatCount>
<TestCaseRequestedList> <TestCaseRequestedList>
100000
010002 010002
030001 030001
000002 000002
@@ -39,6 +40,7 @@
000001 000001
010002 010002
080000 080000
200000
</TestCaseRequestedList> </TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList> <TestCaseExclusionList></TestCaseExclusionList>
@@ -49,6 +51,18 @@
<UE_Trace>yes</UE_Trace> <UE_Trace>yes</UE_Trace>
</testCase> </testCase>
<testCase id="100000">
<class>Custom_Command</class>
<desc>To reset cpupower</desc>
<node>obelix</node>
<command>sudo cpupower idle-set -D 0</command>
</testCase>
<testCase id="200000">
<class>Custom_Command</class>
<desc>To reset cpupower</desc>
<node>obelix</node>
<command>sudo cpupower idle-set -E</command>
</testCase>
<testCase id="010002"> <testCase id="010002">
<class>Terminate_UE</class> <class>Terminate_UE</class>
@@ -32,7 +32,7 @@
<testCase id="060000"> <testCase id="060000">
<class>Terminate_5GCN</class> <class>Terminate_5GCN</class>
<desc>Terminate 5G Core</desc> <desc>Terminate 5G Core</desc>
<args>--type stop-mini-as-ue --fqdn yes --scenario 1</args> <args>--type stop-mini-as-ue --scenario 1</args>
</testCase> </testCase>
</testCaseList> </testCaseList>
+10 -2
View File
@@ -25,7 +25,8 @@
<htmlTabName>CN5G-Start</htmlTabName> <htmlTabName>CN5G-Start</htmlTabName>
<htmlTabIcon>log-in</htmlTabIcon> <htmlTabIcon>log-in</htmlTabIcon>
<TestCaseRequestedList> <TestCaseRequestedList>
000100 100000
000100
</TestCaseRequestedList> </TestCaseRequestedList>
<TestCaseExclusionList> <TestCaseExclusionList>
</TestCaseExclusionList> </TestCaseExclusionList>
@@ -33,7 +34,14 @@
<testCase id="000100"> <testCase id="000100">
<class>Initialize_5GCN</class> <class>Initialize_5GCN</class>
<desc>Initialize 5G Core</desc> <desc>Initialize 5G Core</desc>
<args>--type start-mini-as-ue --fqdn yes --scenario 1 --capture /tmp/oai-cn5g-v1.3.pcap</args> <args>--type start-mini-as-ue --scenario 1 --capture /tmp/oai-cn5g-v1.5.pcap</args>
</testCase>
<testCase id = "100000">
<class>Custom_Command</class>
<desc>To reboot USRP</desc>
<node>asterix</node>
<command>ssh root@172.21.19.14 reboot ; sleep 45</command>
</testCase> </testCase>
</testCaseList> </testCaseList>
+1 -2
View File
@@ -25,7 +25,7 @@
<htmlTabName>CN5G-Start</htmlTabName> <htmlTabName>CN5G-Start</htmlTabName>
<htmlTabIcon>log-in</htmlTabIcon> <htmlTabIcon>log-in</htmlTabIcon>
<TestCaseRequestedList> <TestCaseRequestedList>
000100 000100
</TestCaseRequestedList> </TestCaseRequestedList>
<TestCaseExclusionList> <TestCaseExclusionList>
</TestCaseExclusionList> </TestCaseExclusionList>
@@ -34,5 +34,4 @@
<class>Initialize_5GCN</class> <class>Initialize_5GCN</class>
<desc>Initialize 5G Core</desc> <desc>Initialize 5G Core</desc>
</testCase> </testCase>
</testCaseList> </testCaseList>
@@ -180,7 +180,7 @@ services:
retries: 5 retries: 5
oai_enb: oai_enb:
image: oai-enb:develop image: oaisoftwarealliance/oai-enb:develop
privileged: true privileged: true
container_name: l2sim4g-oai-enb container_name: l2sim4g-oai-enb
network_mode: "host" network_mode: "host"
@@ -230,7 +230,7 @@ services:
retries: 5 retries: 5
oai_ue1: oai_ue1:
image: oai-lte-ue:develop image: oaisoftwarealliance/oai-lte-ue:develop
privileged: true privileged: true
container_name: l2sim4g-oai-lte-ue1 container_name: l2sim4g-oai-lte-ue1
network_mode: "host" network_mode: "host"
@@ -258,7 +258,7 @@ services:
retries: 5 retries: 5
oai_ue2: oai_ue2:
image: oai-lte-ue:develop image: oaisoftwarealliance/oai-lte-ue:develop
privileged: true privileged: true
container_name: l2sim4g-oai-lte-ue2 container_name: l2sim4g-oai-lte-ue2
network_mode: "host" network_mode: "host"
@@ -54,9 +54,6 @@ $ docker image tag oaisoftwarealliance/oai-spgwc:latest oai-spgwc:latest
$ docker image tag oaisoftwarealliance/oai-hss:latest oai-hss:latest $ docker image tag oaisoftwarealliance/oai-hss:latest oai-hss:latest
$ docker image tag oaisoftwarealliance/oai-spgwu-tiny:latest oai-spgwu-tiny:latest $ docker image tag oaisoftwarealliance/oai-spgwu-tiny:latest oai-spgwu-tiny:latest
$ docker image tag oaisoftwarealliance/magma-mme:latest magma-mme:latest $ docker image tag oaisoftwarealliance/magma-mme:latest magma-mme:latest
$ docker image tag oaisoftwarealliance/oai-enb:develop oai-enb:develop
$ docker image tag oaisoftwarealliance/oai-lte-ue:develop oai-lte-ue:develop
``` ```
```bash ```bash
@@ -180,7 +180,7 @@ services:
retries: 5 retries: 5
oai_enb0: oai_enb0:
image: oai-enb:develop image: oaisoftwarealliance/oai-enb:develop
privileged: true privileged: true
container_name: rfsim4g-oai-enb container_name: rfsim4g-oai-enb
networks: networks:
@@ -214,7 +214,7 @@ services:
retries: 5 retries: 5
oai_ue0: oai_ue0:
image: oai-lte-ue:develop image: oaisoftwarealliance/oai-lte-ue:develop
privileged: true privileged: true
container_name: rfsim4g-oai-lte-ue0 container_name: rfsim4g-oai-lte-ue0
networks: networks:
@@ -2,7 +2,7 @@ version: '3.8'
services: services:
oai_enb0: oai_enb0:
image: oai-enb:develop image: oaisoftwarealliance/oai-enb:develop
privileged: true privileged: true
container_name: rfsim4g-oai-enb container_name: rfsim4g-oai-enb
networks: networks:
@@ -36,7 +36,7 @@ services:
retries: 5 retries: 5
oai_ue0: oai_ue0:
image: oai-lte-ue:develop image: oaisoftwarealliance/oai-lte-ue:develop
privileged: true privileged: true
container_name: rfsim4g-oai-lte-ue0 container_name: rfsim4g-oai-lte-ue0
networks: networks:
@@ -180,7 +180,7 @@ services:
retries: 5 retries: 5
oai_enb0: oai_enb0:
image: oai-enb:develop image: oaisoftwarealliance/oai-enb:develop
privileged: true privileged: true
container_name: rfsim4g-oai-enb container_name: rfsim4g-oai-enb
networks: networks:
@@ -214,7 +214,7 @@ services:
retries: 5 retries: 5
oai_ue0: oai_ue0:
image: oai-lte-ue:develop image: oaisoftwarealliance/oai-lte-ue:develop
privileged: true privileged: true
container_name: rfsim4g-oai-lte-ue0 container_name: rfsim4g-oai-lte-ue0
networks: networks:
@@ -180,7 +180,7 @@ services:
retries: 5 retries: 5
oai_enb0: oai_enb0:
image: oai-enb:develop image: oaisoftwarealliance/oai-enb:develop
privileged: true privileged: true
container_name: rfsim4g-oai-enb container_name: rfsim4g-oai-enb
networks: networks:
@@ -214,7 +214,7 @@ services:
retries: 5 retries: 5
oai_ue0: oai_ue0:
image: oai-lte-ue:develop image: oaisoftwarealliance/oai-lte-ue:develop
privileged: true privileged: true
container_name: rfsim4g-oai-lte-ue0 container_name: rfsim4g-oai-lte-ue0
networks: networks:
@@ -2,7 +2,7 @@ version: '3.8'
services: services:
oai_enb0: oai_enb0:
image: oai-enb:develop image: oaisoftwarealliance/oai-enb:develop
privileged: true privileged: true
container_name: rfsim4g-oai-enb container_name: rfsim4g-oai-enb
networks: networks:
@@ -22,7 +22,7 @@ services:
retries: 5 retries: 5
oai_ue0: oai_ue0:
image: oai-lte-ue:develop image: oaisoftwarealliance/oai-lte-ue:develop
privileged: true privileged: true
container_name: rfsim4g-oai-lte-ue0 container_name: rfsim4g-oai-lte-ue0
networks: networks:
@@ -2,7 +2,7 @@ version: '3.8'
services: services:
oai_enb0: oai_enb0:
image: oai-enb:develop image: oaisoftwarealliance/oai-enb:develop
privileged: true privileged: true
container_name: rfsim4g-oai-enb container_name: rfsim4g-oai-enb
networks: networks:
@@ -22,7 +22,7 @@ services:
retries: 5 retries: 5
oai_ue0: oai_ue0:
image: oai-lte-ue:develop image: oaisoftwarealliance/oai-lte-ue:develop
privileged: true privileged: true
container_name: rfsim4g-oai-lte-ue0 container_name: rfsim4g-oai-lte-ue0
networks: networks:
@@ -180,7 +180,7 @@ services:
retries: 5 retries: 5
oai_enb0: oai_enb0:
image: oai-enb:develop image: oaisoftwarealliance/oai-enb:develop
privileged: true privileged: true
container_name: rfsim4g-oai-enb container_name: rfsim4g-oai-enb
networks: networks:
@@ -213,7 +213,7 @@ services:
retries: 5 retries: 5
oai_ue0: oai_ue0:
image: oai-lte-ue:develop image: oaisoftwarealliance/oai-lte-ue:develop
privileged: true privileged: true
container_name: rfsim4g-oai-lte-ue0 container_name: rfsim4g-oai-lte-ue0
networks: networks:
@@ -2,27 +2,16 @@ version: '3.8'
services: services:
oai-nrf: oai-nrf:
container_name: "rfsim5g-oai-nrf" container_name: "rfsim5g-oai-nrf"
image: oai-nrf:august-dev image: oaisoftwarealliance/oai-nrf:v1.5.0
environment: environment:
- NRF_INTERFACE_NAME_FOR_SBI=eth0 - NRF_INTERFACE_NAME_FOR_SBI=eth0
- NRF_INTERFACE_PORT_FOR_SBI=80 - TZ=Europe/Paris
- NRF_INTERFACE_HTTP2_PORT_FOR_SBI=9090
- NRF_API_VERSION=v1
- INSTANCE=0
- PID_DIRECTORY=/var/run
networks: networks:
public_net: public_net:
ipv4_address: 192.168.71.130 ipv4_address: 192.168.71.130
volumes:
- ./nrf-healthcheck.sh:/openair-nrf/bin/nrf-healthcheck.sh
healthcheck:
test: /bin/bash -c "/openair-nrf/bin/nrf-healthcheck.sh"
interval: 10s
timeout: 5s
retries: 5
mysql: mysql:
container_name: "rfsim5g-mysql" container_name: "rfsim5g-mysql"
image: mysql:5.7 image: mysql:8.0
volumes: volumes:
- ./oai_db.sql:/docker-entrypoint-initdb.d/oai_db.sql - ./oai_db.sql:/docker-entrypoint-initdb.d/oai_db.sql
- ./mysql-healthcheck.sh:/tmp/mysql-healthcheck.sh - ./mysql-healthcheck.sh:/tmp/mysql-healthcheck.sh
@@ -36,17 +25,15 @@ services:
test: /bin/bash -c "/tmp/mysql-healthcheck.sh" test: /bin/bash -c "/tmp/mysql-healthcheck.sh"
interval: 10s interval: 10s
timeout: 5s timeout: 5s
retries: 5 retries: 30
networks: networks:
public_net: public_net:
ipv4_address: 192.168.71.131 ipv4_address: 192.168.71.131
oai-amf: oai-amf:
container_name: "rfsim5g-oai-amf" container_name: "rfsim5g-oai-amf"
image: oai-amf:august-dev image: oaisoftwarealliance/oai-amf:v1.5.0
environment: environment:
- TZ=Europe/paris - TZ=Europe/paris
- INSTANCE=0
- PID_DIRECTORY=/var/run
- MCC=208 - MCC=208
- MNC=99 - MNC=99
- REGION_ID=128 - REGION_ID=128
@@ -62,132 +49,85 @@ services:
- PLMN_SUPPORT_MCC=208 - PLMN_SUPPORT_MCC=208
- PLMN_SUPPORT_MNC=99 - PLMN_SUPPORT_MNC=99
- PLMN_SUPPORT_TAC=0x0001 - PLMN_SUPPORT_TAC=0x0001
# Only one slice is defined (1, 0xFFFFFF).
- SST_0=1 - SST_0=1
- SD_0=0xffffff
- SST_1=1
- SD_1=1
- AMF_INTERFACE_NAME_FOR_NGAP=eth0 - AMF_INTERFACE_NAME_FOR_NGAP=eth0
- AMF_INTERFACE_NAME_FOR_N11=eth0 - AMF_INTERFACE_NAME_FOR_N11=eth0
# One single SMF instance
- SMF_INSTANCE_ID_0=1 - SMF_INSTANCE_ID_0=1
- SMF_FQDN_0=oai-smf - SMF_FQDN_0=oai-smf
- SMF_IPV4_ADDR_0=0.0.0.0 - SMF_IPV4_ADDR_0=192.168.71.133
- SMF_HTTP_VERSION_0=v1
- SELECTED_0=true - SELECTED_0=true
- SMF_INSTANCE_ID_1=2 # mysql definition in AMF is mandatory in mini deployment.
- SMF_FQDN_1=oai-smf
- SMF_IPV4_ADDR_1=0.0.0.0
- SMF_HTTP_VERSION_1=v1
- SELECTED_1=false
- MYSQL_SERVER=192.168.71.131 - MYSQL_SERVER=192.168.71.131
- MYSQL_USER=root - MYSQL_USER=root
- MYSQL_PASS=linux - MYSQL_PASS=linux
- MYSQL_DB=oai_db - MYSQL_DB=oai_db
- OPERATOR_KEY=c42449363bbad02b66d16bc975d77cc1 # NF registration
- NRF_IPV4_ADDRESS=192.168.71.130 - NRF_IPV4_ADDRESS=192.168.71.130
- NRF_PORT=80 - NRF_FQDN=oai-nrf
- NF_REGISTRATION=yes - NF_REGISTRATION=yes
- SMF_SELECTION=yes - SMF_SELECTION=yes
- USE_FQDN_DNS=yes - USE_FQDN_DNS=yes
- NRF_API_VERSION=v1 - USE_HTTP2=no
- NRF_FQDN=oai-nrf
- EXTERNAL_AUSF=no
- AUSF_IPV4_ADDRESS=0.0.0.0
- AUSF_PORT=80
- AUSF_API_VERSION=v1
- AUSF_FQDN=localhost
depends_on: depends_on:
- oai-nrf - oai-nrf
- mysql - mysql
volumes:
- ./amf-healthcheck.sh:/openair-amf/bin/amf-healthcheck.sh
healthcheck:
test: /bin/bash -c "/openair-amf/bin/amf-healthcheck.sh"
interval: 10s
timeout: 15s
retries: 5
networks: networks:
public_net: public_net:
ipv4_address: 192.168.71.132 ipv4_address: 192.168.71.132
oai-smf: oai-smf:
container_name: "rfsim5g-oai-smf" container_name: "rfsim5g-oai-smf"
image: oai-smf:august-dev image: oaisoftwarealliance/oai-smf:v1.5.0
environment: environment:
- TZ=Europe/Paris - TZ=Europe/Paris
- INSTANCE=0
- PID_DIRECTORY=/var/run
- SMF_INTERFACE_NAME_FOR_N4=eth0 - SMF_INTERFACE_NAME_FOR_N4=eth0
- SMF_INTERFACE_NAME_FOR_SBI=eth0 - SMF_INTERFACE_NAME_FOR_SBI=eth0
- SMF_INTERFACE_PORT_FOR_SBI=80
- SMF_INTERFACE_HTTP2_PORT_FOR_SBI=9090
- SMF_API_VERSION=v1
- DEFAULT_DNS_IPV4_ADDRESS=172.21.3.100 - DEFAULT_DNS_IPV4_ADDRESS=172.21.3.100
- DEFAULT_DNS_SEC_IPV4_ADDRESS=4.4.4.4 - DEFAULT_DNS_SEC_IPV4_ADDRESS=4.4.4.4
- AMF_IPV4_ADDRESS=0.0.0.0 - AMF_IPV4_ADDRESS=192.168.71.132
- AMF_PORT=80
- AMF_API_VERSION=v1
- AMF_FQDN=oai-amf - AMF_FQDN=oai-amf
- UDM_IPV4_ADDRESS=127.0.0.1
- UDM_PORT=80
- UDM_API_VERSION=v1
- UDM_FQDN=localhost
- UPF_IPV4_ADDRESS=192.168.71.134 - UPF_IPV4_ADDRESS=192.168.71.134
- UPF_FQDN_0=oai-spgwu - UPF_FQDN_0=oai-spgwu
- NRF_IPV4_ADDRESS=192.168.71.130 - NRF_IPV4_ADDRESS=192.168.71.130
- NRF_PORT=80
- NRF_API_VERSION=v1
- NRF_FQDN=oai-nrf - NRF_FQDN=oai-nrf
- REGISTER_NRF=yes - REGISTER_NRF=yes
- DISCOVER_UPF=yes - DISCOVER_UPF=yes
- USE_FQDN_DNS=yes - USE_FQDN_DNS=yes
- USE_LOCAL_SUBSCRIPTION_INFO=yes
- UE_MTU=1500
# Only one slice is defined (1, 0xFFFFFF)
- DNN_NI0=oai - DNN_NI0=oai
- TYPE0=IPv4 - TYPE0=IPv4
- DNN_RANGE0=12.1.1.2 - 12.1.1.127 - DNN_RANGE0=12.1.1.2 - 12.1.1.127
- NSSAI_SST0=1 - NSSAI_SST0=1
- NSSAI_SD0=0xFFFFFF
- SESSION_AMBR_UL0=200Mbps - SESSION_AMBR_UL0=200Mbps
- SESSION_AMBR_DL0=400Mbps - SESSION_AMBR_DL0=400Mbps
- DNN_NI2=oai.ipv4 - DEFAULT_CSCF_IPV4_ADDRESS=127.0.0.1
- ENABLE_USAGE_REPORTING=no
depends_on: depends_on:
- oai-nrf - oai-nrf
- oai-amf - oai-amf
volumes:
- ./smf-healthcheck.sh:/openair-smf/bin/smf-healthcheck.sh
healthcheck:
test: /bin/bash -c "/openair-smf/bin/smf-healthcheck.sh"
interval: 10s
timeout: 5s
retries: 5
networks: networks:
public_net: public_net:
ipv4_address: 192.168.71.133 ipv4_address: 192.168.71.133
oai-spgwu: oai-spgwu:
container_name: "rfsim5g-oai-spgwu" container_name: "rfsim5g-oai-spgwu"
image: oai-spgwu-tiny:august-dev image: oaisoftwarealliance/oai-spgwu-tiny:v1.5.0
environment: environment:
- TZ=Europe/Paris - TZ=Europe/Paris
- PID_DIRECTORY=/var/run
- SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP=eth0 - SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP=eth0
- SGW_INTERFACE_NAME_FOR_SX=eth0 - SGW_INTERFACE_NAME_FOR_SX=eth0
- PGW_INTERFACE_NAME_FOR_SGI=eth0 - PGW_INTERFACE_NAME_FOR_SGI=eth0
- NETWORK_UE_NAT_OPTION=yes - NETWORK_UE_NAT_OPTION=yes
- NETWORK_UE_IP=12.1.1.0/24 - NETWORK_UE_IP=12.1.1.0/24
- SPGWC0_IP_ADDRESS=192.168.71.133
- BYPASS_UL_PFCP_RULES=no
- MCC=208
- MNC=99
- MNC03=099
- TAC=1
- GTP_EXTENSION_HEADER_PRESENT=yes
- GW_ID=1
- REALM=openairinterface.org
- ENABLE_5G_FEATURES=yes - ENABLE_5G_FEATURES=yes
- REGISTER_NRF=yes - REGISTER_NRF=yes
- USE_FQDN_NRF=yes - USE_FQDN_NRF=yes
- UPF_FQDN_5G=oai-spgwu - UPF_FQDN_5G=oai-spgwu
- NRF_IPV4_ADDRESS=192.168.71.130 - NRF_IPV4_ADDRESS=192.168.71.130
- NRF_PORT=80
- NRF_API_VERSION=v1
- NRF_FQDN=oai-nrf - NRF_FQDN=oai-nrf
# Only one slice is defined (1, 0xFFFFFF)
- NSSAI_SST_0=1 - NSSAI_SST_0=1
- NSSAI_SD_0=0xffffff - NSSAI_SD_0=0xffffff
- DNN_0=oai - DNN_0=oai
@@ -200,24 +140,16 @@ services:
cap_drop: cap_drop:
- ALL - ALL
privileged: true privileged: true
volumes:
- ./spgwu-healthcheck.sh:/openair-spgwu-tiny/bin/spgwu-healthcheck.sh
healthcheck:
test: /bin/bash -c "/openair-spgwu-tiny/bin/spgwu-healthcheck.sh"
interval: 10s
timeout: 5s
retries: 5
networks: networks:
public_net: public_net:
ipv4_address: 192.168.71.134 ipv4_address: 192.168.71.134
traffic_net: traffic_net:
ipv4_address: 192.168.72.134 ipv4_address: 192.168.72.134
oai-ext-dn: oai-ext-dn:
image: ubuntu:bionic
privileged: true privileged: true
container_name: rfsim5g-oai-ext-dn container_name: rfsim5g-oai-ext-dn
image: oaisoftwarealliance/trf-gen-cn5g:latest
entrypoint: /bin/bash -c \ entrypoint: /bin/bash -c \
"apt update; apt install -y procps iptables iproute2 iperf iputils-ping;"\
"iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE;"\ "iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE;"\
"ip route add 12.1.1.0/24 via 192.168.72.134 dev eth0; sleep infinity" "ip route add 12.1.1.0/24 via 192.168.72.134 dev eth0; sleep infinity"
depends_on: depends_on:
@@ -231,7 +163,7 @@ services:
timeout: 5s timeout: 5s
retries: 5 retries: 5
oai-cu: oai-cu:
image: oai-gnb:develop image: oaisoftwarealliance/oai-gnb:develop
privileged: true privileged: true
container_name: rfsim5g-oai-cu container_name: rfsim5g-oai-cu
environment: environment:
@@ -265,7 +197,7 @@ services:
timeout: 5s timeout: 5s
retries: 5 retries: 5
oai-du: oai-du:
image: oai-gnb:develop image: oaisoftwarealliance/oai-gnb:develop
privileged: true privileged: true
container_name: rfsim5g-oai-du container_name: rfsim5g-oai-du
environment: environment:
@@ -299,7 +231,7 @@ services:
timeout: 5s timeout: 5s
retries: 5 retries: 5
oai-nr-ue: oai-nr-ue:
image: oai-nr-ue:develop image: oaisoftwarealliance/oai-nr-ue:develop
privileged: true privileged: true
container_name: rfsim5g-oai-nr-ue container_name: rfsim5g-oai-nr-ue
environment: environment:
@@ -2,27 +2,16 @@ version: '3.8'
services: services:
oai-nrf: oai-nrf:
container_name: "rfsim5g-oai-nrf" container_name: "rfsim5g-oai-nrf"
image: oai-nrf:august-dev image: oaisoftwarealliance/oai-nrf:v1.5.0
environment: environment:
- NRF_INTERFACE_NAME_FOR_SBI=eth0 - NRF_INTERFACE_NAME_FOR_SBI=eth0
- NRF_INTERFACE_PORT_FOR_SBI=80 - TZ=Europe/Paris
- NRF_INTERFACE_HTTP2_PORT_FOR_SBI=9090
- NRF_API_VERSION=v1
- INSTANCE=0
- PID_DIRECTORY=/var/run
networks: networks:
public_net: public_net:
ipv4_address: 192.168.71.130 ipv4_address: 192.168.71.130
volumes:
- ./nrf-healthcheck.sh:/openair-nrf/bin/nrf-healthcheck.sh
healthcheck:
test: /bin/bash -c "/openair-nrf/bin/nrf-healthcheck.sh"
interval: 10s
timeout: 5s
retries: 5
mysql: mysql:
container_name: "rfsim5g-mysql" container_name: "rfsim5g-mysql"
image: mysql:5.7 image: mysql:8.0
volumes: volumes:
- ./oai_db.sql:/docker-entrypoint-initdb.d/oai_db.sql - ./oai_db.sql:/docker-entrypoint-initdb.d/oai_db.sql
- ./mysql-healthcheck.sh:/tmp/mysql-healthcheck.sh - ./mysql-healthcheck.sh:/tmp/mysql-healthcheck.sh
@@ -36,17 +25,15 @@ services:
test: /bin/bash -c "/tmp/mysql-healthcheck.sh" test: /bin/bash -c "/tmp/mysql-healthcheck.sh"
interval: 10s interval: 10s
timeout: 5s timeout: 5s
retries: 5 retries: 30
networks: networks:
public_net: public_net:
ipv4_address: 192.168.71.131 ipv4_address: 192.168.71.131
oai-amf: oai-amf:
container_name: "rfsim5g-oai-amf" container_name: "rfsim5g-oai-amf"
image: oai-amf:august-dev image: oaisoftwarealliance/oai-amf:v1.5.0
environment: environment:
- TZ=Europe/paris - TZ=Europe/paris
- INSTANCE=0
- PID_DIRECTORY=/var/run
- MCC=208 - MCC=208
- MNC=99 - MNC=99
- REGION_ID=128 - REGION_ID=128
@@ -62,132 +49,85 @@ services:
- PLMN_SUPPORT_MCC=208 - PLMN_SUPPORT_MCC=208
- PLMN_SUPPORT_MNC=99 - PLMN_SUPPORT_MNC=99
- PLMN_SUPPORT_TAC=0x0001 - PLMN_SUPPORT_TAC=0x0001
# Only one slice is defined (1, 0xFFFFFF).
- SST_0=1 - SST_0=1
- SD_0=0xffffff
- SST_1=1
- SD_1=1
- AMF_INTERFACE_NAME_FOR_NGAP=eth0 - AMF_INTERFACE_NAME_FOR_NGAP=eth0
- AMF_INTERFACE_NAME_FOR_N11=eth0 - AMF_INTERFACE_NAME_FOR_N11=eth0
# One single SMF instance
- SMF_INSTANCE_ID_0=1 - SMF_INSTANCE_ID_0=1
- SMF_FQDN_0=oai-smf - SMF_FQDN_0=oai-smf
- SMF_IPV4_ADDR_0=0.0.0.0 - SMF_IPV4_ADDR_0=192.168.71.133
- SMF_HTTP_VERSION_0=v1
- SELECTED_0=true - SELECTED_0=true
- SMF_INSTANCE_ID_1=2 # mysql definition in AMF is mandatory in mini deployment.
- SMF_FQDN_1=oai-smf
- SMF_IPV4_ADDR_1=0.0.0.0
- SMF_HTTP_VERSION_1=v1
- SELECTED_1=false
- MYSQL_SERVER=192.168.71.131 - MYSQL_SERVER=192.168.71.131
- MYSQL_USER=root - MYSQL_USER=root
- MYSQL_PASS=linux - MYSQL_PASS=linux
- MYSQL_DB=oai_db - MYSQL_DB=oai_db
- OPERATOR_KEY=c42449363bbad02b66d16bc975d77cc1 # NF registration
- NRF_IPV4_ADDRESS=192.168.71.130 - NRF_IPV4_ADDRESS=192.168.71.130
- NRF_PORT=80 - NRF_FQDN=oai-nrf
- NF_REGISTRATION=yes - NF_REGISTRATION=yes
- SMF_SELECTION=yes - SMF_SELECTION=yes
- USE_FQDN_DNS=yes - USE_FQDN_DNS=yes
- NRF_API_VERSION=v1 - USE_HTTP2=no
- NRF_FQDN=oai-nrf
- EXTERNAL_AUSF=no
- AUSF_IPV4_ADDRESS=0.0.0.0
- AUSF_PORT=80
- AUSF_API_VERSION=v1
- AUSF_FQDN=localhost
depends_on: depends_on:
- oai-nrf - oai-nrf
- mysql - mysql
volumes:
- ./amf-healthcheck.sh:/openair-amf/bin/amf-healthcheck.sh
healthcheck:
test: /bin/bash -c "/openair-amf/bin/amf-healthcheck.sh"
interval: 10s
timeout: 15s
retries: 5
networks: networks:
public_net: public_net:
ipv4_address: 192.168.71.132 ipv4_address: 192.168.71.132
oai-smf: oai-smf:
container_name: "rfsim5g-oai-smf" container_name: "rfsim5g-oai-smf"
image: oai-smf:august-dev image: oaisoftwarealliance/oai-smf:v1.5.0
environment: environment:
- TZ=Europe/Paris - TZ=Europe/Paris
- INSTANCE=0
- PID_DIRECTORY=/var/run
- SMF_INTERFACE_NAME_FOR_N4=eth0 - SMF_INTERFACE_NAME_FOR_N4=eth0
- SMF_INTERFACE_NAME_FOR_SBI=eth0 - SMF_INTERFACE_NAME_FOR_SBI=eth0
- SMF_INTERFACE_PORT_FOR_SBI=80
- SMF_INTERFACE_HTTP2_PORT_FOR_SBI=9090
- SMF_API_VERSION=v1
- DEFAULT_DNS_IPV4_ADDRESS=172.21.3.100 - DEFAULT_DNS_IPV4_ADDRESS=172.21.3.100
- DEFAULT_DNS_SEC_IPV4_ADDRESS=4.4.4.4 - DEFAULT_DNS_SEC_IPV4_ADDRESS=4.4.4.4
- AMF_IPV4_ADDRESS=0.0.0.0 - AMF_IPV4_ADDRESS=192.168.71.132
- AMF_PORT=80
- AMF_API_VERSION=v1
- AMF_FQDN=oai-amf - AMF_FQDN=oai-amf
- UDM_IPV4_ADDRESS=127.0.0.1
- UDM_PORT=80
- UDM_API_VERSION=v1
- UDM_FQDN=localhost
- UPF_IPV4_ADDRESS=192.168.71.134 - UPF_IPV4_ADDRESS=192.168.71.134
- UPF_FQDN_0=oai-spgwu - UPF_FQDN_0=oai-spgwu
- NRF_IPV4_ADDRESS=192.168.71.130 - NRF_IPV4_ADDRESS=192.168.71.130
- NRF_PORT=80
- NRF_API_VERSION=v1
- NRF_FQDN=oai-nrf - NRF_FQDN=oai-nrf
- REGISTER_NRF=yes - REGISTER_NRF=yes
- DISCOVER_UPF=yes - DISCOVER_UPF=yes
- USE_FQDN_DNS=yes - USE_FQDN_DNS=yes
- USE_LOCAL_SUBSCRIPTION_INFO=yes
- UE_MTU=1500
# Only one slice is defined (1, 0xFFFFFF)
- DNN_NI0=oai - DNN_NI0=oai
- TYPE0=IPv4 - TYPE0=IPv4
- DNN_RANGE0=12.1.1.2 - 12.1.1.127 - DNN_RANGE0=12.1.1.2 - 12.1.1.127
- NSSAI_SST0=1 - NSSAI_SST0=1
- NSSAI_SD0=0xFFFFFF
- SESSION_AMBR_UL0=200Mbps - SESSION_AMBR_UL0=200Mbps
- SESSION_AMBR_DL0=400Mbps - SESSION_AMBR_DL0=400Mbps
- DNN_NI2=oai.ipv4 - DEFAULT_CSCF_IPV4_ADDRESS=127.0.0.1
- ENABLE_USAGE_REPORTING=no
depends_on: depends_on:
- oai-nrf - oai-nrf
- oai-amf - oai-amf
volumes:
- ./smf-healthcheck.sh:/openair-smf/bin/smf-healthcheck.sh
healthcheck:
test: /bin/bash -c "/openair-smf/bin/smf-healthcheck.sh"
interval: 10s
timeout: 5s
retries: 5
networks: networks:
public_net: public_net:
ipv4_address: 192.168.71.133 ipv4_address: 192.168.71.133
oai-spgwu: oai-spgwu:
container_name: "rfsim5g-oai-spgwu" container_name: "rfsim5g-oai-spgwu"
image: oai-spgwu-tiny:august-dev image: oaisoftwarealliance/oai-spgwu-tiny:v1.5.0
environment: environment:
- TZ=Europe/Paris - TZ=Europe/Paris
- PID_DIRECTORY=/var/run
- SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP=eth0 - SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP=eth0
- SGW_INTERFACE_NAME_FOR_SX=eth0 - SGW_INTERFACE_NAME_FOR_SX=eth0
- PGW_INTERFACE_NAME_FOR_SGI=eth0 - PGW_INTERFACE_NAME_FOR_SGI=eth0
- NETWORK_UE_NAT_OPTION=yes - NETWORK_UE_NAT_OPTION=yes
- NETWORK_UE_IP=12.1.1.0/24 - NETWORK_UE_IP=12.1.1.0/24
- SPGWC0_IP_ADDRESS=192.168.71.133
- BYPASS_UL_PFCP_RULES=no
- MCC=208
- MNC=99
- MNC03=099
- TAC=1
- GTP_EXTENSION_HEADER_PRESENT=yes
- GW_ID=1
- REALM=openairinterface.org
- ENABLE_5G_FEATURES=yes - ENABLE_5G_FEATURES=yes
- REGISTER_NRF=yes - REGISTER_NRF=yes
- USE_FQDN_NRF=yes - USE_FQDN_NRF=yes
- UPF_FQDN_5G=oai-spgwu - UPF_FQDN_5G=oai-spgwu
- NRF_IPV4_ADDRESS=192.168.71.130 - NRF_IPV4_ADDRESS=192.168.71.130
- NRF_PORT=80
- NRF_API_VERSION=v1
- NRF_FQDN=oai-nrf - NRF_FQDN=oai-nrf
# Only one slice is defined (1, 0xFFFFFF)
- NSSAI_SST_0=1 - NSSAI_SST_0=1
- NSSAI_SD_0=0xffffff - NSSAI_SD_0=0xffffff
- DNN_0=oai - DNN_0=oai
@@ -200,24 +140,16 @@ services:
cap_drop: cap_drop:
- ALL - ALL
privileged: true privileged: true
volumes:
- ./spgwu-healthcheck.sh:/openair-spgwu-tiny/bin/spgwu-healthcheck.sh
healthcheck:
test: /bin/bash -c "/openair-spgwu-tiny/bin/spgwu-healthcheck.sh"
interval: 10s
timeout: 5s
retries: 5
networks: networks:
public_net: public_net:
ipv4_address: 192.168.71.134 ipv4_address: 192.168.71.134
traffic_net: traffic_net:
ipv4_address: 192.168.72.134 ipv4_address: 192.168.72.134
oai-ext-dn: oai-ext-dn:
image: ubuntu:bionic
privileged: true privileged: true
container_name: rfsim5g-oai-ext-dn container_name: rfsim5g-oai-ext-dn
image: oaisoftwarealliance/trf-gen-cn5g:latest
entrypoint: /bin/bash -c \ entrypoint: /bin/bash -c \
"apt update; apt install -y procps iptables iproute2 iperf iputils-ping;"\
"iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE;"\ "iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE;"\
"ip route add 12.1.1.0/24 via 192.168.72.134 dev eth0; sleep infinity" "ip route add 12.1.1.0/24 via 192.168.72.134 dev eth0; sleep infinity"
depends_on: depends_on:
@@ -231,7 +163,7 @@ services:
timeout: 5s timeout: 5s
retries: 5 retries: 5
oai-gnb: oai-gnb:
image: oai-gnb:develop image: oaisoftwarealliance/oai-gnb:develop
privileged: true privileged: true
container_name: rfsim5g-oai-gnb container_name: rfsim5g-oai-gnb
environment: environment:
@@ -260,7 +192,7 @@ services:
timeout: 5s timeout: 5s
retries: 5 retries: 5
oai-nr-ue: oai-nr-ue:
image: oai-nr-ue:develop image: oaisoftwarealliance/oai-nr-ue:develop
privileged: true privileged: true
container_name: rfsim5g-oai-nr-ue container_name: rfsim5g-oai-nr-ue
environment: environment:
+8 -14
View File
@@ -32,28 +32,22 @@ Password:
Now pull images. Now pull images.
```bash ```bash
$ docker pull mysql:5.7 $ docker pull mysql:8.0
$ docker pull oaisoftwarealliance/oai-amf:develop $ docker pull oaisoftwarealliance/oai-amf:v1.5.0
$ docker pull oaisoftwarealliance/oai-nrf:develop $ docker pull oaisoftwarealliance/oai-nrf:v1.5.0
$ docker pull oaisoftwarealliance/oai-smf:develop $ docker pull oaisoftwarealliance/oai-smf:v1.5.0
$ docker pull oaisoftwarealliance/oai-spgwu-tiny:develop $ docker pull oaisoftwarealliance/oai-spgwu-tiny:v1.5.0
$ docker pull oaisoftwarealliance/trf-gen-cn5g:latest
$ docker pull oaisoftwarealliance/oai-gnb:develop $ docker pull oaisoftwarealliance/oai-gnb:develop
$ docker pull oaisoftwarealliance/oai-nr-ue:develop $ docker pull oaisoftwarealliance/oai-nr-ue:develop
$ docker pull oaisoftwarealliance/proxy:latest $ docker pull oaisoftwarealliance/proxy:develop
``` ```
And **re-tag** them for tutorials' docker-compose file to work. And **re-tag** them for tutorials' docker-compose file to work.
```bash ```bash
$ docker image tag oaisoftwarealliance/oai-amf:latest oai-amf:august-dev $ docker image tag oaisoftwarealliance/proxy:develop oai-lte-multi-ue-proxy:latest
$ docker image tag oaisoftwarealliance/oai-nrf:latest oai-nrf:august-dev
$ docker image tag oaisoftwarealliance/oai-smf:latest oai-smf:august-dev
$ docker image tag oaisoftwarealliance/oai-spgwu-tiny:latest oai-spgwu-tiny:august-dev
$ docker image tag oaisoftwarealliance/oai-gnb:develop oai-gnb:develop
$ docker image tag oaisoftwarealliance/oai-nr-ue:develop oai-nr-ue:develop
$ docker image tag oaisoftwarealliance/proxy:latest oai-lte-multi-ue-proxy:latest
``` ```
```bash ```bash
@@ -2,27 +2,16 @@ version: '3.8'
services: services:
oai-nrf: oai-nrf:
container_name: "l2sim-oai-nrf" container_name: "l2sim-oai-nrf"
image: oai-nrf:august-dev image: oaisoftwarealliance/oai-nrf:v1.5.0
environment: environment:
- NRF_INTERFACE_NAME_FOR_SBI=eth0 - NRF_INTERFACE_NAME_FOR_SBI=eth0
- NRF_INTERFACE_PORT_FOR_SBI=80 - TZ=Europe/Paris
- NRF_INTERFACE_HTTP2_PORT_FOR_SBI=9090
- NRF_API_VERSION=v1
- INSTANCE=0
- PID_DIRECTORY=/var/run
networks: networks:
public_net: public_net:
ipv4_address: 192.168.71.130 ipv4_address: 192.168.71.130
volumes:
- ../5g_rfsimulator/nrf-healthcheck.sh:/openair-nrf/bin/nrf-healthcheck.sh
healthcheck:
test: /bin/bash -c "/openair-nrf/bin/nrf-healthcheck.sh"
interval: 10s
timeout: 5s
retries: 5
mysql: mysql:
container_name: "l2sim-mysql" container_name: "l2sim-mysql"
image: mysql:5.7 image: mysql:8.0
volumes: volumes:
- ../5g_rfsimulator/oai_db.sql:/docker-entrypoint-initdb.d/oai_db.sql - ../5g_rfsimulator/oai_db.sql:/docker-entrypoint-initdb.d/oai_db.sql
- ../5g_rfsimulator/mysql-healthcheck.sh:/tmp/mysql-healthcheck.sh - ../5g_rfsimulator/mysql-healthcheck.sh:/tmp/mysql-healthcheck.sh
@@ -36,17 +25,15 @@ services:
test: /bin/bash -c "/tmp/mysql-healthcheck.sh" test: /bin/bash -c "/tmp/mysql-healthcheck.sh"
interval: 10s interval: 10s
timeout: 5s timeout: 5s
retries: 5 retries: 30
networks: networks:
public_net: public_net:
ipv4_address: 192.168.71.131 ipv4_address: 192.168.71.131
oai-amf: oai-amf:
container_name: "l2sim-oai-amf" container_name: "l2sim-oai-amf"
image: oai-amf:august-dev image: oaisoftwarealliance/oai-amf:v1.5.0
environment: environment:
- TZ=Europe/paris - TZ=Europe/paris
- INSTANCE=0
- PID_DIRECTORY=/var/run
- MCC=208 - MCC=208
- MNC=99 - MNC=99
- REGION_ID=128 - REGION_ID=128
@@ -62,132 +49,85 @@ services:
- PLMN_SUPPORT_MCC=208 - PLMN_SUPPORT_MCC=208
- PLMN_SUPPORT_MNC=99 - PLMN_SUPPORT_MNC=99
- PLMN_SUPPORT_TAC=0x0001 - PLMN_SUPPORT_TAC=0x0001
# Only one slice is defined (1, 0xFFFFFF).
- SST_0=1 - SST_0=1
- SD_0=0xffffff
- SST_1=1
- SD_1=1
- AMF_INTERFACE_NAME_FOR_NGAP=eth0 - AMF_INTERFACE_NAME_FOR_NGAP=eth0
- AMF_INTERFACE_NAME_FOR_N11=eth0 - AMF_INTERFACE_NAME_FOR_N11=eth0
# One single SMF instance
- SMF_INSTANCE_ID_0=1 - SMF_INSTANCE_ID_0=1
- SMF_FQDN_0=oai-smf - SMF_FQDN_0=oai-smf
- SMF_IPV4_ADDR_0=0.0.0.0 - SMF_IPV4_ADDR_0=192.168.71.133
- SMF_HTTP_VERSION_0=v1
- SELECTED_0=true - SELECTED_0=true
- SMF_INSTANCE_ID_1=2 # mysql definition in AMF is mandatory in mini deployment.
- SMF_FQDN_1=oai-smf
- SMF_IPV4_ADDR_1=0.0.0.0
- SMF_HTTP_VERSION_1=v1
- SELECTED_1=false
- MYSQL_SERVER=192.168.71.131 - MYSQL_SERVER=192.168.71.131
- MYSQL_USER=root - MYSQL_USER=root
- MYSQL_PASS=linux - MYSQL_PASS=linux
- MYSQL_DB=oai_db - MYSQL_DB=oai_db
- OPERATOR_KEY=c42449363bbad02b66d16bc975d77cc1 # NF registration
- NRF_IPV4_ADDRESS=192.168.71.130 - NRF_IPV4_ADDRESS=192.168.71.130
- NRF_PORT=80 - NRF_FQDN=oai-nrf
- NF_REGISTRATION=yes - NF_REGISTRATION=yes
- SMF_SELECTION=yes - SMF_SELECTION=yes
- USE_FQDN_DNS=yes - USE_FQDN_DNS=yes
- NRF_API_VERSION=v1 - USE_HTTP2=no
- NRF_FQDN=oai-nrf
- EXTERNAL_AUSF=no
- AUSF_IPV4_ADDRESS=0.0.0.0
- AUSF_PORT=80
- AUSF_API_VERSION=v1
- AUSF_FQDN=localhost
depends_on: depends_on:
- oai-nrf - oai-nrf
- mysql - mysql
volumes:
- ../5g_rfsimulator/amf-healthcheck.sh:/openair-amf/bin/amf-healthcheck.sh
healthcheck:
test: /bin/bash -c "/openair-amf/bin/amf-healthcheck.sh"
interval: 10s
timeout: 15s
retries: 5
networks: networks:
public_net: public_net:
ipv4_address: 192.168.71.132 ipv4_address: 192.168.71.132
oai-smf: oai-smf:
container_name: "l2sim-oai-smf" container_name: "l2sim-oai-smf"
image: oai-smf:august-dev image: oaisoftwarealliance/oai-smf:v1.5.0
environment: environment:
- TZ=Europe/Paris - TZ=Europe/Paris
- INSTANCE=0
- PID_DIRECTORY=/var/run
- SMF_INTERFACE_NAME_FOR_N4=eth0 - SMF_INTERFACE_NAME_FOR_N4=eth0
- SMF_INTERFACE_NAME_FOR_SBI=eth0 - SMF_INTERFACE_NAME_FOR_SBI=eth0
- SMF_INTERFACE_PORT_FOR_SBI=80
- SMF_INTERFACE_HTTP2_PORT_FOR_SBI=9090
- SMF_API_VERSION=v1
- DEFAULT_DNS_IPV4_ADDRESS=172.21.3.100 - DEFAULT_DNS_IPV4_ADDRESS=172.21.3.100
- DEFAULT_DNS_SEC_IPV4_ADDRESS=4.4.4.4 - DEFAULT_DNS_SEC_IPV4_ADDRESS=4.4.4.4
- AMF_IPV4_ADDRESS=0.0.0.0 - AMF_IPV4_ADDRESS=192.168.71.132
- AMF_PORT=80
- AMF_API_VERSION=v1
- AMF_FQDN=oai-amf - AMF_FQDN=oai-amf
- UDM_IPV4_ADDRESS=127.0.0.1
- UDM_PORT=80
- UDM_API_VERSION=v1
- UDM_FQDN=localhost
- UPF_IPV4_ADDRESS=192.168.71.134 - UPF_IPV4_ADDRESS=192.168.71.134
- UPF_FQDN_0=oai-spgwu - UPF_FQDN_0=oai-spgwu
- NRF_IPV4_ADDRESS=192.168.71.130 - NRF_IPV4_ADDRESS=192.168.71.130
- NRF_PORT=80
- NRF_API_VERSION=v1
- NRF_FQDN=oai-nrf - NRF_FQDN=oai-nrf
- REGISTER_NRF=yes - REGISTER_NRF=yes
- DISCOVER_UPF=yes - DISCOVER_UPF=yes
- USE_FQDN_DNS=yes - USE_FQDN_DNS=yes
- USE_LOCAL_SUBSCRIPTION_INFO=yes
- UE_MTU=1500
# Only one slice is defined (1, 0xFFFFFF)
- DNN_NI0=oai - DNN_NI0=oai
- TYPE0=IPv4 - TYPE0=IPv4
- DNN_RANGE0=12.1.1.2 - 12.1.1.127 - DNN_RANGE0=12.1.1.2 - 12.1.1.127
- NSSAI_SST0=1 - NSSAI_SST0=1
- NSSAI_SD0=0xFFFFFF
- SESSION_AMBR_UL0=200Mbps - SESSION_AMBR_UL0=200Mbps
- SESSION_AMBR_DL0=400Mbps - SESSION_AMBR_DL0=400Mbps
- DNN_NI2=oai.ipv4 - DEFAULT_CSCF_IPV4_ADDRESS=127.0.0.1
- ENABLE_USAGE_REPORTING=no
depends_on: depends_on:
- oai-nrf - oai-nrf
- oai-amf - oai-amf
volumes:
- ../5g_rfsimulator/smf-healthcheck.sh:/openair-smf/bin/smf-healthcheck.sh
healthcheck:
test: /bin/bash -c "/openair-smf/bin/smf-healthcheck.sh"
interval: 10s
timeout: 5s
retries: 5
networks: networks:
public_net: public_net:
ipv4_address: 192.168.71.133 ipv4_address: 192.168.71.133
oai-spgwu: oai-spgwu:
container_name: "l2sim-oai-spgwu" container_name: "l2sim-oai-spgwu"
image: oai-spgwu-tiny:august-dev image: oaisoftwarealliance/oai-spgwu-tiny:v1.5.0
environment: environment:
- TZ=Europe/Paris - TZ=Europe/Paris
- PID_DIRECTORY=/var/run
- SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP=eth0 - SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP=eth0
- SGW_INTERFACE_NAME_FOR_SX=eth0 - SGW_INTERFACE_NAME_FOR_SX=eth0
- PGW_INTERFACE_NAME_FOR_SGI=eth0 - PGW_INTERFACE_NAME_FOR_SGI=eth0
- NETWORK_UE_NAT_OPTION=yes - NETWORK_UE_NAT_OPTION=yes
- NETWORK_UE_IP=12.1.1.0/24 - NETWORK_UE_IP=12.1.1.0/24
- SPGWC0_IP_ADDRESS=192.168.71.133
- BYPASS_UL_PFCP_RULES=no
- MCC=208
- MNC=99
- MNC03=099
- TAC=1
- GTP_EXTENSION_HEADER_PRESENT=yes
- GW_ID=1
- REALM=openairinterface.org
- ENABLE_5G_FEATURES=yes - ENABLE_5G_FEATURES=yes
- REGISTER_NRF=yes - REGISTER_NRF=yes
- USE_FQDN_NRF=yes - USE_FQDN_NRF=yes
- UPF_FQDN_5G=oai-spgwu - UPF_FQDN_5G=oai-spgwu
- NRF_IPV4_ADDRESS=192.168.71.130 - NRF_IPV4_ADDRESS=192.168.71.130
- NRF_PORT=80
- NRF_API_VERSION=v1
- NRF_FQDN=oai-nrf - NRF_FQDN=oai-nrf
# Only one slice is defined (1, 0xFFFFFF)
- NSSAI_SST_0=1 - NSSAI_SST_0=1
- NSSAI_SD_0=0xffffff - NSSAI_SD_0=0xffffff
- DNN_0=oai - DNN_0=oai
@@ -200,24 +140,17 @@ services:
cap_drop: cap_drop:
- ALL - ALL
privileged: true privileged: true
volumes:
- ../5g_rfsimulator/spgwu-healthcheck.sh:/openair-spgwu-tiny/bin/spgwu-healthcheck.sh
healthcheck:
test: /bin/bash -c "/openair-spgwu-tiny/bin/spgwu-healthcheck.sh"
interval: 10s
timeout: 5s
retries: 5
networks: networks:
public_net: public_net:
ipv4_address: 192.168.71.134 ipv4_address: 192.168.71.134
traffic_net: traffic_net:
ipv4_address: 192.168.72.134 ipv4_address: 192.168.72.134
oai-ext-dn: oai-ext-dn:
image: ubuntu:bionic
privileged: true privileged: true
container_name: "l2sim-oai-ext-dn" container_name: "l2sim-oai-ext-dn"
image: oaisoftwarealliance/trf-gen-cn5g:latest
entrypoint: /bin/bash -c \ entrypoint: /bin/bash -c \
"apt update; apt install -y procps iptables iproute2 iperf iputils-ping;"\ "iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE;"\
"ip route add 12.1.1.0/24 via 192.168.72.134 dev eth0; sleep infinity" "ip route add 12.1.1.0/24 via 192.168.72.134 dev eth0; sleep infinity"
depends_on: depends_on:
- oai-spgwu - oai-spgwu
@@ -230,7 +163,7 @@ services:
timeout: 5s timeout: 5s
retries: 5 retries: 5
oai-gnb: oai-gnb:
image: oai-gnb:develop image: oaisoftwarealliance/oai-gnb:develop
privileged: true privileged: true
container_name: "l2sim-oai-gnb" container_name: "l2sim-oai-gnb"
network_mode: "host" network_mode: "host"
@@ -278,7 +211,7 @@ services:
retries: 5 retries: 5
oai-nr-ue0: oai-nr-ue0:
image: oai-nr-ue:develop image: oaisoftwarealliance/oai-nr-ue:develop
privileged: true privileged: true
container_name: "l2sim-oai-nr-ue0" container_name: "l2sim-oai-nr-ue0"
network_mode: "host" network_mode: "host"
+9 -20
View File
@@ -14,7 +14,7 @@
This page is only valid for an `Ubuntu18` host. This page is only valid for an `Ubuntu18` host.
**NOTE: this version (2022-01-27) has been updated for the `v1.3.0` version of the `OAI 5G CN`.** **NOTE: this version (2023-01-27) has been updated for the `v1.5.0` version of the `OAI 5G CN`.**
**Table of Contents** **Table of Contents**
@@ -36,35 +36,24 @@ Password:
Now pull images. Now pull images.
```bash ```bash
$ docker pull mysql:5.7 $ docker pull mysql:8.0
$ docker pull oaisoftwarealliance/oai-amf:develop $ docker pull oaisoftwarealliance/oai-amf:v1.5.0
$ docker pull oaisoftwarealliance/oai-nrf:develop $ docker pull oaisoftwarealliance/oai-nrf:v1.5.0
$ docker pull oaisoftwarealliance/oai-smf:develop $ docker pull oaisoftwarealliance/oai-smf:v1.5.0
$ docker pull oaisoftwarealliance/oai-spgwu-tiny:develop $ docker pull oaisoftwarealliance/oai-spgwu-tiny:v1.5.0
$ docker pull oaisoftwarealliance/trf-gen-cn5g:latest
$ docker pull oaisoftwarealliance/oai-gnb:develop $ docker pull oaisoftwarealliance/oai-gnb:develop
$ docker pull oaisoftwarealliance/oai-nr-ue:develop $ docker pull oaisoftwarealliance/oai-nr-ue:develop
``` ```
And **re-tag** them for tutorials' docker-compose file to work.
```bash
$ docker image tag oaisoftwarealliance/oai-amf:latest oai-amf:august-dev
$ docker image tag oaisoftwarealliance/oai-nrf:latest oai-nrf:august-dev
$ docker image tag oaisoftwarealliance/oai-smf:latest oai-smf:august-dev
$ docker image tag oaisoftwarealliance/oai-spgwu-tiny:latest oai-spgwu-tiny:august-dev
$ docker image tag oaisoftwarealliance/oai-gnb:develop oai-gnb:develop
$ docker image tag oaisoftwarealliance/oai-nr-ue:develop oai-nr-ue:develop
```
```bash ```bash
$ docker logout $ docker logout
``` ```
**CAUTION: 2022/01/27 with the release `v1.3.0` of the `CN5G`, the previous version was not compatible any-more.** **CAUTION: 2023/01/27 with the release `v1.5.0` of the `CN5G`, the previous version was not compatible any-more.**
**This new version is working only with the `v1.3.0` of the `CN5G`.** **This new version is working only with the `v1.5.0` of the `CN5G`.**
# 2. Deploy containers # # 2. Deploy containers #
@@ -1,57 +0,0 @@
#!/bin/bash
set -eo pipefail
STATUS=0
AMF_PORT_FOR_NGAP=38412
AMF_PORT_FOR_N11_HTTP=80
AMF_IP_NGAP_INTERFACE=$(ifconfig $AMF_INTERFACE_NAME_FOR_NGAP | grep inet | awk {'print $2'})
AMF_IP_N11_INTERFACE=$(ifconfig $AMF_INTERFACE_NAME_FOR_N11 | grep inet | awk {'print $2'})
N2_PORT_STATUS=$(netstat -Snpl | grep -o "$AMF_IP_NGAP_INTERFACE:$AMF_PORT_FOR_NGAP")
N11_PORT_STATUS=$(netstat -tnpl | grep -o "$AMF_IP_N11_INTERFACE:$AMF_PORT_FOR_N11_HTTP")
#Check if entrypoint properly configured the conf file and no parameter is unset (optional)
NB_UNREPLACED_AT=`cat /openair-amf/etc/*.conf | grep -v contact@openairinterface.org | grep -c @ || true`
if [ $NB_UNREPLACED_AT -ne 0 ]; then
STATUS=1
echo "Healthcheck error: configuration file is not configured properly"
fi
if [[ -z $N2_PORT_STATUS ]]; then
STATUS=1
echo "Healthcheck error: N2 SCTP port $AMF_PORT_FOR_NGAP is not listening"
fi
if [[ -z $N11_PORT_STATUS ]]; then
STATUS=1
echo "Healthcheck error: N11/SBI TCP/HTTP port $AMF_PORT_FOR_N11_HTTP is not listening"
fi
#host="${MYSQL_SERVER}"
#user="${MYSQL_USER:-root}"
#export MYSQL_PWD="${MYSQL_PASS}"
#args=(
# -h"$host"
# -u"$user"
# --silent
#)
#if ! command -v mysql &> /dev/null; then
# echo "Installing mysql command"
# apt update
# apt-get -y install mysql-client
#else
# if select="$(echo 'SELECT 1' | mysql "${args[@]}")" && [ "$select" = '1' ]; then
# database_check=$(mysql -h$host -u$user -D oai_db --silent -e "SELECT * FROM users;")
# if [[ -z $database_check ]]; then
# echo "Healthcheck error: oai_db not populated"
# STATUS=1
# fi
# STATUS=0
# else
# echo "Healthcheck error: Mysql port inactive"
# STATUS=1
# fi
#fi
exit $STATUS
@@ -2,27 +2,16 @@ version: '3.8'
services: services:
oai-nrf: oai-nrf:
container_name: "rfsim5g-oai-nrf" container_name: "rfsim5g-oai-nrf"
image: oai-nrf:august-dev image: oaisoftwarealliance/oai-nrf:v1.5.0
environment: environment:
- NRF_INTERFACE_NAME_FOR_SBI=eth0 - NRF_INTERFACE_NAME_FOR_SBI=eth0
- NRF_INTERFACE_PORT_FOR_SBI=80 - TZ=Europe/Paris
- NRF_INTERFACE_HTTP2_PORT_FOR_SBI=9090
- NRF_API_VERSION=v1
- INSTANCE=0
- PID_DIRECTORY=/var/run
networks: networks:
public_net: public_net:
ipv4_address: 192.168.71.130 ipv4_address: 192.168.71.130
volumes:
- ./nrf-healthcheck.sh:/openair-nrf/bin/nrf-healthcheck.sh
healthcheck:
test: /bin/bash -c "/openair-nrf/bin/nrf-healthcheck.sh"
interval: 10s
timeout: 5s
retries: 5
mysql: mysql:
container_name: "rfsim5g-mysql" container_name: "rfsim5g-mysql"
image: mysql:5.7 image: mysql:8.0
volumes: volumes:
- ./oai_db.sql:/docker-entrypoint-initdb.d/oai_db.sql - ./oai_db.sql:/docker-entrypoint-initdb.d/oai_db.sql
- ./mysql-healthcheck.sh:/tmp/mysql-healthcheck.sh - ./mysql-healthcheck.sh:/tmp/mysql-healthcheck.sh
@@ -36,17 +25,15 @@ services:
test: /bin/bash -c "/tmp/mysql-healthcheck.sh" test: /bin/bash -c "/tmp/mysql-healthcheck.sh"
interval: 10s interval: 10s
timeout: 5s timeout: 5s
retries: 5 retries: 30
networks: networks:
public_net: public_net:
ipv4_address: 192.168.71.131 ipv4_address: 192.168.71.131
oai-amf: oai-amf:
container_name: "rfsim5g-oai-amf" container_name: "rfsim5g-oai-amf"
image: oai-amf:august-dev image: oaisoftwarealliance/oai-amf:v1.5.0
environment: environment:
- TZ=Europe/paris - TZ=Europe/paris
- INSTANCE=0
- PID_DIRECTORY=/var/run
- MCC=208 - MCC=208
- MNC=99 - MNC=99
- REGION_ID=128 - REGION_ID=128
@@ -62,132 +49,85 @@ services:
- PLMN_SUPPORT_MCC=208 - PLMN_SUPPORT_MCC=208
- PLMN_SUPPORT_MNC=99 - PLMN_SUPPORT_MNC=99
- PLMN_SUPPORT_TAC=0x0001 - PLMN_SUPPORT_TAC=0x0001
# Only one slice is defined (1, 0xFFFFFF).
- SST_0=1 - SST_0=1
- SD_0=0xffffff
- SST_1=1
- SD_1=1
- AMF_INTERFACE_NAME_FOR_NGAP=eth0 - AMF_INTERFACE_NAME_FOR_NGAP=eth0
- AMF_INTERFACE_NAME_FOR_N11=eth0 - AMF_INTERFACE_NAME_FOR_N11=eth0
# One single SMF instance
- SMF_INSTANCE_ID_0=1 - SMF_INSTANCE_ID_0=1
- SMF_FQDN_0=oai-smf - SMF_FQDN_0=oai-smf
- SMF_IPV4_ADDR_0=0.0.0.0 - SMF_IPV4_ADDR_0=192.168.71.133
- SMF_HTTP_VERSION_0=v1
- SELECTED_0=true - SELECTED_0=true
- SMF_INSTANCE_ID_1=2 # mysql definition in AMF is mandatory in mini deployment.
- SMF_FQDN_1=oai-smf
- SMF_IPV4_ADDR_1=0.0.0.0
- SMF_HTTP_VERSION_1=v1
- SELECTED_1=false
- MYSQL_SERVER=192.168.71.131 - MYSQL_SERVER=192.168.71.131
- MYSQL_USER=root - MYSQL_USER=root
- MYSQL_PASS=linux - MYSQL_PASS=linux
- MYSQL_DB=oai_db - MYSQL_DB=oai_db
- OPERATOR_KEY=c42449363bbad02b66d16bc975d77cc1 # NF registration
- NRF_IPV4_ADDRESS=192.168.71.130 - NRF_IPV4_ADDRESS=192.168.71.130
- NRF_PORT=80 - NRF_FQDN=oai-nrf
- NF_REGISTRATION=yes - NF_REGISTRATION=yes
- SMF_SELECTION=yes - SMF_SELECTION=yes
- USE_FQDN_DNS=yes - USE_FQDN_DNS=yes
- NRF_API_VERSION=v1 - USE_HTTP2=no
- NRF_FQDN=oai-nrf
- EXTERNAL_AUSF=no
- AUSF_IPV4_ADDRESS=0.0.0.0
- AUSF_PORT=80
- AUSF_API_VERSION=v1
- AUSF_FQDN=localhost
depends_on: depends_on:
- oai-nrf - oai-nrf
- mysql - mysql
volumes:
- ./amf-healthcheck.sh:/openair-amf/bin/amf-healthcheck.sh
healthcheck:
test: /bin/bash -c "/openair-amf/bin/amf-healthcheck.sh"
interval: 10s
timeout: 15s
retries: 5
networks: networks:
public_net: public_net:
ipv4_address: 192.168.71.132 ipv4_address: 192.168.71.132
oai-smf: oai-smf:
container_name: "rfsim5g-oai-smf" container_name: "rfsim5g-oai-smf"
image: oai-smf:august-dev image: oaisoftwarealliance/oai-smf:v1.5.0
environment: environment:
- TZ=Europe/Paris - TZ=Europe/Paris
- INSTANCE=0
- PID_DIRECTORY=/var/run
- SMF_INTERFACE_NAME_FOR_N4=eth0 - SMF_INTERFACE_NAME_FOR_N4=eth0
- SMF_INTERFACE_NAME_FOR_SBI=eth0 - SMF_INTERFACE_NAME_FOR_SBI=eth0
- SMF_INTERFACE_PORT_FOR_SBI=80
- SMF_INTERFACE_HTTP2_PORT_FOR_SBI=9090
- SMF_API_VERSION=v1
- DEFAULT_DNS_IPV4_ADDRESS=172.21.3.100 - DEFAULT_DNS_IPV4_ADDRESS=172.21.3.100
- DEFAULT_DNS_SEC_IPV4_ADDRESS=4.4.4.4 - DEFAULT_DNS_SEC_IPV4_ADDRESS=4.4.4.4
- AMF_IPV4_ADDRESS=0.0.0.0 - AMF_IPV4_ADDRESS=192.168.71.132
- AMF_PORT=80
- AMF_API_VERSION=v1
- AMF_FQDN=oai-amf - AMF_FQDN=oai-amf
- UDM_IPV4_ADDRESS=127.0.0.1
- UDM_PORT=80
- UDM_API_VERSION=v1
- UDM_FQDN=localhost
- UPF_IPV4_ADDRESS=192.168.71.134 - UPF_IPV4_ADDRESS=192.168.71.134
- UPF_FQDN_0=oai-spgwu - UPF_FQDN_0=oai-spgwu
- NRF_IPV4_ADDRESS=192.168.71.130 - NRF_IPV4_ADDRESS=192.168.71.130
- NRF_PORT=80
- NRF_API_VERSION=v1
- NRF_FQDN=oai-nrf - NRF_FQDN=oai-nrf
- REGISTER_NRF=yes - REGISTER_NRF=yes
- DISCOVER_UPF=yes - DISCOVER_UPF=yes
- USE_FQDN_DNS=yes - USE_FQDN_DNS=yes
- USE_LOCAL_SUBSCRIPTION_INFO=yes
- UE_MTU=1500
# Only one slice is defined (1, 0xFFFFFF)
- DNN_NI0=oai - DNN_NI0=oai
- TYPE0=IPv4 - TYPE0=IPv4
- DNN_RANGE0=12.1.1.2 - 12.1.1.127 - DNN_RANGE0=12.1.1.2 - 12.1.1.127
- NSSAI_SST0=1 - NSSAI_SST0=1
- NSSAI_SD0=0xFFFFFF
- SESSION_AMBR_UL0=200Mbps - SESSION_AMBR_UL0=200Mbps
- SESSION_AMBR_DL0=400Mbps - SESSION_AMBR_DL0=400Mbps
- DNN_NI2=oai.ipv4 - DEFAULT_CSCF_IPV4_ADDRESS=127.0.0.1
- ENABLE_USAGE_REPORTING=no
depends_on: depends_on:
- oai-nrf - oai-nrf
- oai-amf - oai-amf
volumes:
- ./smf-healthcheck.sh:/openair-smf/bin/smf-healthcheck.sh
healthcheck:
test: /bin/bash -c "/openair-smf/bin/smf-healthcheck.sh"
interval: 10s
timeout: 5s
retries: 5
networks: networks:
public_net: public_net:
ipv4_address: 192.168.71.133 ipv4_address: 192.168.71.133
oai-spgwu: oai-spgwu:
container_name: "rfsim5g-oai-spgwu" container_name: "rfsim5g-oai-spgwu"
image: oai-spgwu-tiny:august-dev image: oaisoftwarealliance/oai-spgwu-tiny:v1.5.0
environment: environment:
- TZ=Europe/Paris - TZ=Europe/Paris
- PID_DIRECTORY=/var/run
- SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP=eth0 - SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP=eth0
- SGW_INTERFACE_NAME_FOR_SX=eth0 - SGW_INTERFACE_NAME_FOR_SX=eth0
- PGW_INTERFACE_NAME_FOR_SGI=eth0 - PGW_INTERFACE_NAME_FOR_SGI=eth0
- NETWORK_UE_NAT_OPTION=yes - NETWORK_UE_NAT_OPTION=yes
- NETWORK_UE_IP=12.1.1.0/24 - NETWORK_UE_IP=12.1.1.0/24
- SPGWC0_IP_ADDRESS=192.168.71.133
- BYPASS_UL_PFCP_RULES=no
- MCC=208
- MNC=99
- MNC03=099
- TAC=1
- GTP_EXTENSION_HEADER_PRESENT=yes
- GW_ID=1
- REALM=openairinterface.org
- ENABLE_5G_FEATURES=yes - ENABLE_5G_FEATURES=yes
- REGISTER_NRF=yes - REGISTER_NRF=yes
- USE_FQDN_NRF=yes - USE_FQDN_NRF=yes
- UPF_FQDN_5G=oai-spgwu - UPF_FQDN_5G=oai-spgwu
- NRF_IPV4_ADDRESS=192.168.71.130 - NRF_IPV4_ADDRESS=192.168.71.130
- NRF_PORT=80
- NRF_API_VERSION=v1
- NRF_FQDN=oai-nrf - NRF_FQDN=oai-nrf
# Only one slice is defined (1, 0xFFFFFF)
- NSSAI_SST_0=1 - NSSAI_SST_0=1
- NSSAI_SD_0=0xffffff - NSSAI_SD_0=0xffffff
- DNN_0=oai - DNN_0=oai
@@ -200,24 +140,16 @@ services:
cap_drop: cap_drop:
- ALL - ALL
privileged: true privileged: true
volumes:
- ./spgwu-healthcheck.sh:/openair-spgwu-tiny/bin/spgwu-healthcheck.sh
healthcheck:
test: /bin/bash -c "/openair-spgwu-tiny/bin/spgwu-healthcheck.sh"
interval: 10s
timeout: 5s
retries: 5
networks: networks:
public_net: public_net:
ipv4_address: 192.168.71.134 ipv4_address: 192.168.71.134
traffic_net: traffic_net:
ipv4_address: 192.168.72.134 ipv4_address: 192.168.72.134
oai-ext-dn: oai-ext-dn:
image: ubuntu:bionic
privileged: true privileged: true
container_name: rfsim5g-oai-ext-dn container_name: rfsim5g-oai-ext-dn
image: oaisoftwarealliance/trf-gen-cn5g:latest
entrypoint: /bin/bash -c \ entrypoint: /bin/bash -c \
"apt update; apt install -y procps iptables iproute2 iperf iputils-ping;"\
"iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE;"\ "iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE;"\
"ip route add 12.1.1.0/24 via 192.168.72.134 dev eth0; sleep infinity" "ip route add 12.1.1.0/24 via 192.168.72.134 dev eth0; sleep infinity"
depends_on: depends_on:
@@ -231,10 +163,10 @@ services:
timeout: 5s timeout: 5s
retries: 5 retries: 5
oai-gnb: oai-gnb:
image: oai-gnb:develop image: oaisoftwarealliance/oai-gnb:develop
privileged: true privileged: true
container_name: rfsim5g-oai-gnb container_name: rfsim5g-oai-gnb
environment: environment:
RFSIMULATOR: server RFSIMULATOR: server
USE_SA_TDD_MONO: 'yes' USE_SA_TDD_MONO: 'yes'
GNB_NAME: gnb-rfsim GNB_NAME: gnb-rfsim
@@ -261,7 +193,7 @@ services:
timeout: 5s timeout: 5s
retries: 5 retries: 5
oai-nr-ue: oai-nr-ue:
image: oai-nr-ue:develop image: oaisoftwarealliance/oai-nr-ue:develop
privileged: true privileged: true
container_name: rfsim5g-oai-nr-ue container_name: rfsim5g-oai-nr-ue
environment: environment:
@@ -284,7 +216,7 @@ services:
retries: 5 retries: 5
oai-nr-ue2: oai-nr-ue2:
image: oai-nr-ue:develop image: oaisoftwarealliance/oai-nr-ue:develop
privileged: true privileged: true
container_name: rfsim5g-oai-nr-ue2 container_name: rfsim5g-oai-nr-ue2
environment: environment:
@@ -1,20 +0,0 @@
#!/bin/bash
set -eo pipefail
STATUS=0
NRF_IP_SBI_INTERFACE=$(ifconfig $NRF_INTERFACE_NAME_FOR_SBI | grep inet | awk {'print $2'})
NRF_SBI_PORT_STATUS=$(netstat -tnpl | grep -o "$NRF_IP_SBI_INTERFACE:$NRF_INTERFACE_PORT_FOR_SBI")
#Check if entrypoint properly configured the conf file and no parameter is unset(optional)
NB_UNREPLACED_AT=`cat /openair-nrf/etc/*.conf | grep -v contact@openairinterface.org | grep -c @ || true`
if [ $NB_UNREPLACED_AT -ne 0 ]; then
STATUS=1
echo "Healthcheck error: UNHEALTHY configuration file is not configured properly"
fi
if [[ -z $NRF_SBI_PORT_STATUS ]]; then
STATUS=1
echo "Healthcheck error: UNHEALTHY SBI TCP/HTTP port $NRF_INTERFACE_PORT_FOR_SBI is not listening."
fi
exit $STATUS
@@ -1,21 +0,0 @@
#!/bin/bash
set -eo pipefail
STATUS=0
SMF_IP_SBI_INTERFACE=$(ifconfig $SMF_INTERFACE_NAME_FOR_SBI | grep inet | awk {'print $2'})
SMF_SBI_PORT_STATUS=$(netstat -tnpl | grep -o "$SMF_IP_SBI_INTERFACE:$SMF_INTERFACE_PORT_FOR_SBI")
#Check if entrypoint properly configured the conf file and no parameter is unset(optional)
#NB_UNREPLACED_AT=`cat /openair-smf/etc/*.conf | grep -v contact@openairinterface.org | grep -c @ || true`
#if [ $NB_UNREPLACED_AT -ne 0 ]; then
# STATUS=-1
# echo "Healthcheck error: UNHEALTHY configuration file is not configured properly"
#fi
#
if [[ -z $SMF_SBI_PORT_STATUS ]]; then
STATUS=-1
echo "Healthcheck error: UNHEALTHY SBI TCP/HTTP port $SMF_INTERFACE_PORT_FOR_SBI is not listening."
fi
exit $STATUS
@@ -1,28 +0,0 @@
#!/bin/bash
set -eo pipefail
STATUS=0
SGW_PORT_FOR_S1U_S12_S4_UP=2152
SGW_PORT_FOR_SX=8805
SGW_IP_S1U_INTERFACE=$(ifconfig $SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP | grep inet | awk {'print $2'})
SGW_IP_SX_INTERFACE=$(ifconfig $SGW_INTERFACE_NAME_FOR_SX | grep inet | awk {'print $2'})
S1U_S12_S4_UP_PORT_STATUS=$(netstat -unpl | grep -o "$SGW_IP_S1U_INTERFACE:$SGW_PORT_FOR_S1U_S12_S4_UP")
SX_PORT_STATUS=$(netstat -unpl | grep -o "$SGW_IP_SX_INTERFACE:$SGW_PORT_FOR_SX")
#Check if entrypoint properly configured the conf file and no parameter is unset (optional)
NB_UNREPLACED_AT=`cat /openair-spgwu/etc/*.conf | grep -v contact@openairinterface.org | grep -c @ || true`
if [ $NB_UNREPLACED_AT -ne 0 ]; then
STATUS=1
echo "Healthcheck error: UNHEALTHY configuration file is not configured properly"
fi
if [[ -z $S1U_S12_S4_UP_PORT_STATUS ]]; then
STATUS=1
echo "Healthcheck error: UNHEALTHY S1U port $SGW_PORT_FOR_S1U_S12_S4_UP is not listening."
fi
if [[ -z $SX_PORT_STATUS ]]; then
STATUS=1
echo "Healthcheck error: UNHEALTHY SX port $SGW_PORT_FOR_SX is not listening."
fi
exit $STATUS
@@ -2,28 +2,16 @@ version: '3.8'
services: services:
oai-nrf: oai-nrf:
container_name: "rfsim5g-oai-nrf" container_name: "rfsim5g-oai-nrf"
image: oai-nrf:august-dev image: oaisoftwarealliance/oai-nrf:v1.5.0
environment: environment:
- NRF_INTERFACE_NAME_FOR_SBI=eth0 - NRF_INTERFACE_NAME_FOR_SBI=eth0
- NRF_INTERFACE_PORT_FOR_SBI=80 - TZ=Europe/Paris
- NRF_INTERFACE_HTTP2_PORT_FOR_SBI=9090
- NRF_API_VERSION=v1
- INSTANCE=0
- PID_DIRECTORY=/var/run
networks: networks:
public_net: public_net:
ipv4_address: 192.168.71.130 ipv4_address: 192.168.71.130
volumes:
- ../5g_rfsimulator/nrf-healthcheck.sh:/openair-nrf/bin/nrf-healthcheck.sh
healthcheck:
test: /bin/bash -c "/openair-nrf/bin/nrf-healthcheck.sh"
interval: 10s
timeout: 5s
retries: 5
mysql: mysql:
container_name: "rfsim5g-mysql" container_name: "rfsim5g-mysql"
image: mysql:5.7 image: mysql:8.0
volumes: volumes:
- ../5g_rfsimulator/oai_db.sql:/docker-entrypoint-initdb.d/oai_db.sql - ../5g_rfsimulator/oai_db.sql:/docker-entrypoint-initdb.d/oai_db.sql
- ../5g_rfsimulator/mysql-healthcheck.sh:/tmp/mysql-healthcheck.sh - ../5g_rfsimulator/mysql-healthcheck.sh:/tmp/mysql-healthcheck.sh
@@ -37,18 +25,15 @@ services:
test: /bin/bash -c "/tmp/mysql-healthcheck.sh" test: /bin/bash -c "/tmp/mysql-healthcheck.sh"
interval: 10s interval: 10s
timeout: 5s timeout: 5s
retries: 5 retries: 30
networks: networks:
public_net: public_net:
ipv4_address: 192.168.71.131 ipv4_address: 192.168.71.131
oai-amf: oai-amf:
container_name: "rfsim5g-oai-amf" container_name: "rfsim5g-oai-amf"
image: oai-amf:august-dev image: oaisoftwarealliance/oai-amf:v1.5.0
environment: environment:
- TZ=Europe/paris - TZ=Europe/paris
- INSTANCE=0
- PID_DIRECTORY=/var/run
- MCC=208 - MCC=208
- MNC=99 - MNC=99
- REGION_ID=128 - REGION_ID=128
@@ -64,134 +49,85 @@ services:
- PLMN_SUPPORT_MCC=208 - PLMN_SUPPORT_MCC=208
- PLMN_SUPPORT_MNC=99 - PLMN_SUPPORT_MNC=99
- PLMN_SUPPORT_TAC=0x0001 - PLMN_SUPPORT_TAC=0x0001
# Only one slice is defined (1, 0xFFFFFF).
- SST_0=1 - SST_0=1
- SD_0=0xffffff
- SST_1=1
- SD_1=1
- AMF_INTERFACE_NAME_FOR_NGAP=eth0 - AMF_INTERFACE_NAME_FOR_NGAP=eth0
- AMF_INTERFACE_NAME_FOR_N11=eth0 - AMF_INTERFACE_NAME_FOR_N11=eth0
# One single SMF instance
- SMF_INSTANCE_ID_0=1 - SMF_INSTANCE_ID_0=1
- SMF_FQDN_0=oai-smf - SMF_FQDN_0=oai-smf
- SMF_IPV4_ADDR_0=0.0.0.0 - SMF_IPV4_ADDR_0=192.168.71.133
- SMF_HTTP_VERSION_0=v1
- SELECTED_0=true - SELECTED_0=true
- SMF_INSTANCE_ID_1=2 # mysql definition in AMF is mandatory in mini deployment.
- SMF_FQDN_1=oai-smf
- SMF_IPV4_ADDR_1=0.0.0.0
- SMF_HTTP_VERSION_1=v1
- SELECTED_1=false
- MYSQL_SERVER=192.168.71.131 - MYSQL_SERVER=192.168.71.131
- MYSQL_USER=root - MYSQL_USER=root
- MYSQL_PASS=linux - MYSQL_PASS=linux
- MYSQL_DB=oai_db - MYSQL_DB=oai_db
- OPERATOR_KEY=c42449363bbad02b66d16bc975d77cc1 # NF registration
- NRF_IPV4_ADDRESS=192.168.71.130 - NRF_IPV4_ADDRESS=192.168.71.130
- NRF_PORT=80 - NRF_FQDN=oai-nrf
- NF_REGISTRATION=yes - NF_REGISTRATION=yes
- SMF_SELECTION=yes - SMF_SELECTION=yes
- USE_FQDN_DNS=yes - USE_FQDN_DNS=yes
- NRF_API_VERSION=v1 - USE_HTTP2=no
- NRF_FQDN=oai-nrf
- EXTERNAL_AUSF=no
- AUSF_IPV4_ADDRESS=0.0.0.0
- AUSF_PORT=80
- AUSF_API_VERSION=v1
- AUSF_FQDN=localhost
depends_on: depends_on:
- oai-nrf - oai-nrf
- mysql - mysql
volumes:
- ../5g_rfsimulator/amf-healthcheck.sh:/openair-amf/bin/amf-healthcheck.sh
healthcheck:
test: /bin/bash -c "/openair-amf/bin/amf-healthcheck.sh"
interval: 10s
timeout: 15s
retries: 5
networks: networks:
public_net: public_net:
ipv4_address: 192.168.71.132 ipv4_address: 192.168.71.132
oai-smf: oai-smf:
container_name: "rfsim5g-oai-smf" container_name: "rfsim5g-oai-smf"
image: oai-smf:august-dev image: oaisoftwarealliance/oai-smf:v1.5.0
environment: environment:
- TZ=Europe/Paris - TZ=Europe/Paris
- INSTANCE=0
- PID_DIRECTORY=/var/run
- SMF_INTERFACE_NAME_FOR_N4=eth0 - SMF_INTERFACE_NAME_FOR_N4=eth0
- SMF_INTERFACE_NAME_FOR_SBI=eth0 - SMF_INTERFACE_NAME_FOR_SBI=eth0
- SMF_INTERFACE_PORT_FOR_SBI=80
- SMF_INTERFACE_HTTP2_PORT_FOR_SBI=9090
- SMF_API_VERSION=v1
- DEFAULT_DNS_IPV4_ADDRESS=172.21.3.100 - DEFAULT_DNS_IPV4_ADDRESS=172.21.3.100
- DEFAULT_DNS_SEC_IPV4_ADDRESS=4.4.4.4 - DEFAULT_DNS_SEC_IPV4_ADDRESS=4.4.4.4
- AMF_IPV4_ADDRESS=0.0.0.0 - AMF_IPV4_ADDRESS=192.168.71.132
- AMF_PORT=80
- AMF_API_VERSION=v1
- AMF_FQDN=oai-amf - AMF_FQDN=oai-amf
- UDM_IPV4_ADDRESS=127.0.0.1
- UDM_PORT=80
- UDM_API_VERSION=v1
- UDM_FQDN=localhost
- UPF_IPV4_ADDRESS=192.168.71.134 - UPF_IPV4_ADDRESS=192.168.71.134
- UPF_FQDN_0=oai-spgwu - UPF_FQDN_0=oai-spgwu
- NRF_IPV4_ADDRESS=192.168.71.130 - NRF_IPV4_ADDRESS=192.168.71.130
- NRF_PORT=80
- NRF_API_VERSION=v1
- NRF_FQDN=oai-nrf - NRF_FQDN=oai-nrf
- REGISTER_NRF=yes - REGISTER_NRF=yes
- DISCOVER_UPF=yes - DISCOVER_UPF=yes
- USE_FQDN_DNS=yes - USE_FQDN_DNS=yes
- USE_LOCAL_SUBSCRIPTION_INFO=yes
- UE_MTU=1500
# Only one slice is defined (1, 0xFFFFFF)
- DNN_NI0=oai - DNN_NI0=oai
- TYPE0=IPv4 - TYPE0=IPv4
- DNN_RANGE0=12.1.1.2 - 12.1.1.127 - DNN_RANGE0=12.1.1.2 - 12.1.1.127
- NSSAI_SST0=1 - NSSAI_SST0=1
- NSSAI_SD0=0xFFFFFF
- SESSION_AMBR_UL0=200Mbps - SESSION_AMBR_UL0=200Mbps
- SESSION_AMBR_DL0=400Mbps - SESSION_AMBR_DL0=400Mbps
- DNN_NI2=oai.ipv4 - DEFAULT_CSCF_IPV4_ADDRESS=127.0.0.1
- ENABLE_USAGE_REPORTING=no
depends_on: depends_on:
- oai-nrf - oai-nrf
- oai-amf - oai-amf
volumes:
- ../5g_rfsimulator/smf-healthcheck.sh:/openair-smf/bin/smf-healthcheck.sh
healthcheck:
test: /bin/bash -c "/openair-smf/bin/smf-healthcheck.sh"
interval: 10s
timeout: 5s
retries: 5
networks: networks:
public_net: public_net:
ipv4_address: 192.168.71.133 ipv4_address: 192.168.71.133
oai-spgwu: oai-spgwu:
container_name: "rfsim5g-oai-spgwu" container_name: "rfsim5g-oai-spgwu"
image: oai-spgwu-tiny:august-dev image: oaisoftwarealliance/oai-spgwu-tiny:v1.5.0
environment: environment:
- TZ=Europe/Paris - TZ=Europe/Paris
- PID_DIRECTORY=/var/run
- SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP=eth0 - SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP=eth0
- SGW_INTERFACE_NAME_FOR_SX=eth0 - SGW_INTERFACE_NAME_FOR_SX=eth0
- PGW_INTERFACE_NAME_FOR_SGI=eth0 - PGW_INTERFACE_NAME_FOR_SGI=eth0
- NETWORK_UE_NAT_OPTION=yes - NETWORK_UE_NAT_OPTION=yes
- NETWORK_UE_IP=12.1.1.0/24 - NETWORK_UE_IP=12.1.1.0/24
- SPGWC0_IP_ADDRESS=192.168.71.133
- BYPASS_UL_PFCP_RULES=no
- MCC=208
- MNC=99
- MNC03=099
- TAC=1
- GTP_EXTENSION_HEADER_PRESENT=yes
- GW_ID=1
- REALM=openairinterface.org
- ENABLE_5G_FEATURES=yes - ENABLE_5G_FEATURES=yes
- REGISTER_NRF=yes - REGISTER_NRF=yes
- USE_FQDN_NRF=yes - USE_FQDN_NRF=yes
- UPF_FQDN_5G=oai-spgwu - UPF_FQDN_5G=oai-spgwu
- NRF_IPV4_ADDRESS=192.168.71.130 - NRF_IPV4_ADDRESS=192.168.71.130
- NRF_PORT=80
- NRF_API_VERSION=v1
- NRF_FQDN=oai-nrf - NRF_FQDN=oai-nrf
# Only one slice is defined (1, 0xFFFFFF)
- NSSAI_SST_0=1 - NSSAI_SST_0=1
- NSSAI_SD_0=0xffffff - NSSAI_SD_0=0xffffff
- DNN_0=oai - DNN_0=oai
@@ -204,25 +140,16 @@ services:
cap_drop: cap_drop:
- ALL - ALL
privileged: true privileged: true
volumes:
- ../5g_rfsimulator/spgwu-healthcheck.sh:/openair-spgwu-tiny/bin/spgwu-healthcheck.sh
healthcheck:
test: /bin/bash -c "/openair-spgwu-tiny/bin/spgwu-healthcheck.sh"
interval: 10s
timeout: 5s
retries: 5
networks: networks:
public_net: public_net:
ipv4_address: 192.168.71.134 ipv4_address: 192.168.71.134
traffic_net: traffic_net:
ipv4_address: 192.168.72.134 ipv4_address: 192.168.72.134
oai-ext-dn: oai-ext-dn:
image: ubuntu:bionic
privileged: true privileged: true
container_name: rfsim5g-oai-ext-dn container_name: rfsim5g-oai-ext-dn
image: oaisoftwarealliance/trf-gen-cn5g:latest
entrypoint: /bin/bash -c \ entrypoint: /bin/bash -c \
"apt update; apt install -y procps iptables iproute2 iperf iputils-ping;"\
"iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE;"\ "iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE;"\
"ip route add 12.1.1.0/24 via 192.168.72.134 dev eth0; sleep infinity" "ip route add 12.1.1.0/24 via 192.168.72.134 dev eth0; sleep infinity"
depends_on: depends_on:
@@ -235,9 +162,8 @@ services:
interval: 10s interval: 10s
timeout: 5s timeout: 5s
retries: 5 retries: 5
oai-gnb: oai-gnb:
image: oai-gnb:develop image: oaisoftwarealliance/oai-gnb:develop
privileged: true privileged: true
container_name: rfsim5g-oai-gnb container_name: rfsim5g-oai-gnb
environment: environment:
@@ -256,9 +182,8 @@ services:
interval: 10s interval: 10s
timeout: 5s timeout: 5s
retries: 5 retries: 5
oai-nr-ue: oai-nr-ue:
image: oai-nr-ue:develop image: oaisoftwarealliance/oai-nr-ue:develop
privileged: true privileged: true
container_name: rfsim5g-oai-nr-ue container_name: rfsim5g-oai-nr-ue
environment: environment:
@@ -2,28 +2,16 @@ version: '3.8'
services: services:
oai-nrf: oai-nrf:
container_name: "rfsim5g-oai-nrf" container_name: "rfsim5g-oai-nrf"
image: oai-nrf:august-dev image: oaisoftwarealliance/oai-nrf:v1.5.0
environment: environment:
- NRF_INTERFACE_NAME_FOR_SBI=eth0 - NRF_INTERFACE_NAME_FOR_SBI=eth0
- NRF_INTERFACE_PORT_FOR_SBI=80 - TZ=Europe/Paris
- NRF_INTERFACE_HTTP2_PORT_FOR_SBI=9090
- NRF_API_VERSION=v1
- INSTANCE=0
- PID_DIRECTORY=/var/run
networks: networks:
public_net: public_net:
ipv4_address: 192.168.71.130 ipv4_address: 192.168.71.130
volumes:
- ../5g_rfsimulator/nrf-healthcheck.sh:/openair-nrf/bin/nrf-healthcheck.sh
healthcheck:
test: /bin/bash -c "/openair-nrf/bin/nrf-healthcheck.sh"
interval: 10s
timeout: 5s
retries: 5
mysql: mysql:
container_name: "rfsim5g-mysql" container_name: "rfsim5g-mysql"
image: mysql:5.7 image: mysql:8.0
volumes: volumes:
- ../5g_rfsimulator/oai_db.sql:/docker-entrypoint-initdb.d/oai_db.sql - ../5g_rfsimulator/oai_db.sql:/docker-entrypoint-initdb.d/oai_db.sql
- ../5g_rfsimulator/mysql-healthcheck.sh:/tmp/mysql-healthcheck.sh - ../5g_rfsimulator/mysql-healthcheck.sh:/tmp/mysql-healthcheck.sh
@@ -37,18 +25,15 @@ services:
test: /bin/bash -c "/tmp/mysql-healthcheck.sh" test: /bin/bash -c "/tmp/mysql-healthcheck.sh"
interval: 10s interval: 10s
timeout: 5s timeout: 5s
retries: 5 retries: 30
networks: networks:
public_net: public_net:
ipv4_address: 192.168.71.131 ipv4_address: 192.168.71.131
oai-amf: oai-amf:
container_name: "rfsim5g-oai-amf" container_name: "rfsim5g-oai-amf"
image: oai-amf:august-dev image: oaisoftwarealliance/oai-amf:v1.5.0
environment: environment:
- TZ=Europe/paris - TZ=Europe/paris
- INSTANCE=0
- PID_DIRECTORY=/var/run
- MCC=208 - MCC=208
- MNC=99 - MNC=99
- REGION_ID=128 - REGION_ID=128
@@ -64,134 +49,85 @@ services:
- PLMN_SUPPORT_MCC=208 - PLMN_SUPPORT_MCC=208
- PLMN_SUPPORT_MNC=99 - PLMN_SUPPORT_MNC=99
- PLMN_SUPPORT_TAC=0x0001 - PLMN_SUPPORT_TAC=0x0001
# Only one slice is defined (1, 0xFFFFFF).
- SST_0=1 - SST_0=1
- SD_0=0xffffff
- SST_1=1
- SD_1=1
- AMF_INTERFACE_NAME_FOR_NGAP=eth0 - AMF_INTERFACE_NAME_FOR_NGAP=eth0
- AMF_INTERFACE_NAME_FOR_N11=eth0 - AMF_INTERFACE_NAME_FOR_N11=eth0
# One single SMF instance
- SMF_INSTANCE_ID_0=1 - SMF_INSTANCE_ID_0=1
- SMF_FQDN_0=oai-smf - SMF_FQDN_0=oai-smf
- SMF_IPV4_ADDR_0=0.0.0.0 - SMF_IPV4_ADDR_0=192.168.71.133
- SMF_HTTP_VERSION_0=v1
- SELECTED_0=true - SELECTED_0=true
- SMF_INSTANCE_ID_1=2 # mysql definition in AMF is mandatory in mini deployment.
- SMF_FQDN_1=oai-smf
- SMF_IPV4_ADDR_1=0.0.0.0
- SMF_HTTP_VERSION_1=v1
- SELECTED_1=false
- MYSQL_SERVER=192.168.71.131 - MYSQL_SERVER=192.168.71.131
- MYSQL_USER=root - MYSQL_USER=root
- MYSQL_PASS=linux - MYSQL_PASS=linux
- MYSQL_DB=oai_db - MYSQL_DB=oai_db
- OPERATOR_KEY=c42449363bbad02b66d16bc975d77cc1 # NF registration
- NRF_IPV4_ADDRESS=192.168.71.130 - NRF_IPV4_ADDRESS=192.168.71.130
- NRF_PORT=80 - NRF_FQDN=oai-nrf
- NF_REGISTRATION=yes - NF_REGISTRATION=yes
- SMF_SELECTION=yes - SMF_SELECTION=yes
- USE_FQDN_DNS=yes - USE_FQDN_DNS=yes
- NRF_API_VERSION=v1 - USE_HTTP2=no
- NRF_FQDN=oai-nrf
- EXTERNAL_AUSF=no
- AUSF_IPV4_ADDRESS=0.0.0.0
- AUSF_PORT=80
- AUSF_API_VERSION=v1
- AUSF_FQDN=localhost
depends_on: depends_on:
- oai-nrf - oai-nrf
- mysql - mysql
volumes:
- ../5g_rfsimulator/amf-healthcheck.sh:/openair-amf/bin/amf-healthcheck.sh
healthcheck:
test: /bin/bash -c "/openair-amf/bin/amf-healthcheck.sh"
interval: 10s
timeout: 15s
retries: 5
networks: networks:
public_net: public_net:
ipv4_address: 192.168.71.132 ipv4_address: 192.168.71.132
oai-smf: oai-smf:
container_name: "rfsim5g-oai-smf" container_name: "rfsim5g-oai-smf"
image: oai-smf:august-dev image: oaisoftwarealliance/oai-smf:v1.5.0
environment: environment:
- TZ=Europe/Paris - TZ=Europe/Paris
- INSTANCE=0
- PID_DIRECTORY=/var/run
- SMF_INTERFACE_NAME_FOR_N4=eth0 - SMF_INTERFACE_NAME_FOR_N4=eth0
- SMF_INTERFACE_NAME_FOR_SBI=eth0 - SMF_INTERFACE_NAME_FOR_SBI=eth0
- SMF_INTERFACE_PORT_FOR_SBI=80
- SMF_INTERFACE_HTTP2_PORT_FOR_SBI=9090
- SMF_API_VERSION=v1
- DEFAULT_DNS_IPV4_ADDRESS=172.21.3.100 - DEFAULT_DNS_IPV4_ADDRESS=172.21.3.100
- DEFAULT_DNS_SEC_IPV4_ADDRESS=4.4.4.4 - DEFAULT_DNS_SEC_IPV4_ADDRESS=4.4.4.4
- AMF_IPV4_ADDRESS=0.0.0.0 - AMF_IPV4_ADDRESS=192.168.71.132
- AMF_PORT=80
- AMF_API_VERSION=v1
- AMF_FQDN=oai-amf - AMF_FQDN=oai-amf
- UDM_IPV4_ADDRESS=127.0.0.1
- UDM_PORT=80
- UDM_API_VERSION=v1
- UDM_FQDN=localhost
- UPF_IPV4_ADDRESS=192.168.71.134 - UPF_IPV4_ADDRESS=192.168.71.134
- UPF_FQDN_0=oai-spgwu - UPF_FQDN_0=oai-spgwu
- NRF_IPV4_ADDRESS=192.168.71.130 - NRF_IPV4_ADDRESS=192.168.71.130
- NRF_PORT=80
- NRF_API_VERSION=v1
- NRF_FQDN=oai-nrf - NRF_FQDN=oai-nrf
- REGISTER_NRF=yes - REGISTER_NRF=yes
- DISCOVER_UPF=yes - DISCOVER_UPF=yes
- USE_FQDN_DNS=yes - USE_FQDN_DNS=yes
- USE_LOCAL_SUBSCRIPTION_INFO=yes
- UE_MTU=1500
# Only one slice is defined (1, 0xFFFFFF)
- DNN_NI0=oai - DNN_NI0=oai
- TYPE0=IPv4 - TYPE0=IPv4
- DNN_RANGE0=12.1.1.2 - 12.1.1.127 - DNN_RANGE0=12.1.1.2 - 12.1.1.127
- NSSAI_SST0=1 - NSSAI_SST0=1
- NSSAI_SD0=0xFFFFFF
- SESSION_AMBR_UL0=200Mbps - SESSION_AMBR_UL0=200Mbps
- SESSION_AMBR_DL0=400Mbps - SESSION_AMBR_DL0=400Mbps
- DNN_NI2=oai.ipv4 - DEFAULT_CSCF_IPV4_ADDRESS=127.0.0.1
- ENABLE_USAGE_REPORTING=no
depends_on: depends_on:
- oai-nrf - oai-nrf
- oai-amf - oai-amf
volumes:
- ../5g_rfsimulator/smf-healthcheck.sh:/openair-smf/bin/smf-healthcheck.sh
healthcheck:
test: /bin/bash -c "/openair-smf/bin/smf-healthcheck.sh"
interval: 10s
timeout: 5s
retries: 5
networks: networks:
public_net: public_net:
ipv4_address: 192.168.71.133 ipv4_address: 192.168.71.133
oai-spgwu: oai-spgwu:
container_name: "rfsim5g-oai-spgwu" container_name: "rfsim5g-oai-spgwu"
image: oai-spgwu-tiny:august-dev image: oaisoftwarealliance/oai-spgwu-tiny:v1.5.0
environment: environment:
- TZ=Europe/Paris - TZ=Europe/Paris
- PID_DIRECTORY=/var/run
- SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP=eth0 - SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP=eth0
- SGW_INTERFACE_NAME_FOR_SX=eth0 - SGW_INTERFACE_NAME_FOR_SX=eth0
- PGW_INTERFACE_NAME_FOR_SGI=eth0 - PGW_INTERFACE_NAME_FOR_SGI=eth0
- NETWORK_UE_NAT_OPTION=yes - NETWORK_UE_NAT_OPTION=yes
- NETWORK_UE_IP=12.1.1.0/24 - NETWORK_UE_IP=12.1.1.0/24
- SPGWC0_IP_ADDRESS=192.168.71.133
- BYPASS_UL_PFCP_RULES=no
- MCC=208
- MNC=99
- MNC03=099
- TAC=1
- GTP_EXTENSION_HEADER_PRESENT=yes
- GW_ID=1
- REALM=openairinterface.org
- ENABLE_5G_FEATURES=yes - ENABLE_5G_FEATURES=yes
- REGISTER_NRF=yes - REGISTER_NRF=yes
- USE_FQDN_NRF=yes - USE_FQDN_NRF=yes
- UPF_FQDN_5G=oai-spgwu - UPF_FQDN_5G=oai-spgwu
- NRF_IPV4_ADDRESS=192.168.71.130 - NRF_IPV4_ADDRESS=192.168.71.130
- NRF_PORT=80
- NRF_API_VERSION=v1
- NRF_FQDN=oai-nrf - NRF_FQDN=oai-nrf
# Only one slice is defined (1, 0xFFFFFF)
- NSSAI_SST_0=1 - NSSAI_SST_0=1
- NSSAI_SD_0=0xffffff - NSSAI_SD_0=0xffffff
- DNN_0=oai - DNN_0=oai
@@ -204,25 +140,16 @@ services:
cap_drop: cap_drop:
- ALL - ALL
privileged: true privileged: true
volumes:
- ../5g_rfsimulator/spgwu-healthcheck.sh:/openair-spgwu-tiny/bin/spgwu-healthcheck.sh
healthcheck:
test: /bin/bash -c "/openair-spgwu-tiny/bin/spgwu-healthcheck.sh"
interval: 10s
timeout: 5s
retries: 5
networks: networks:
public_net: public_net:
ipv4_address: 192.168.71.134 ipv4_address: 192.168.71.134
traffic_net: traffic_net:
ipv4_address: 192.168.72.134 ipv4_address: 192.168.72.134
oai-ext-dn: oai-ext-dn:
image: ubuntu:bionic
privileged: true privileged: true
container_name: rfsim5g-oai-ext-dn container_name: rfsim5g-oai-ext-dn
image: oaisoftwarealliance/trf-gen-cn5g:latest
entrypoint: /bin/bash -c \ entrypoint: /bin/bash -c \
"apt update; apt install -y procps iptables iproute2 iperf iputils-ping;"\
"iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE;"\ "iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE;"\
"ip route add 12.1.1.0/24 via 192.168.72.134 dev eth0; sleep infinity" "ip route add 12.1.1.0/24 via 192.168.72.134 dev eth0; sleep infinity"
depends_on: depends_on:
@@ -235,9 +162,8 @@ services:
interval: 10s interval: 10s
timeout: 5s timeout: 5s
retries: 5 retries: 5
oai-gnb: oai-gnb:
image: oai-gnb:develop image: oaisoftwarealliance/oai-gnb:develop
privileged: true privileged: true
container_name: rfsim5g-oai-gnb container_name: rfsim5g-oai-gnb
environment: environment:
@@ -258,7 +184,7 @@ services:
retries: 5 retries: 5
oai-nr-ue: oai-nr-ue:
image: oai-nr-ue:develop image: oaisoftwarealliance/oai-nr-ue:develop
privileged: true privileged: true
container_name: rfsim5g-oai-nr-ue container_name: rfsim5g-oai-nr-ue
environment: environment:
@@ -2,28 +2,16 @@ version: '3.8'
services: services:
oai-nrf: oai-nrf:
container_name: "rfsim5g-oai-nrf" container_name: "rfsim5g-oai-nrf"
image: oai-nrf:august-dev image: oaisoftwarealliance/oai-nrf:v1.5.0
environment: environment:
- NRF_INTERFACE_NAME_FOR_SBI=eth0 - NRF_INTERFACE_NAME_FOR_SBI=eth0
- NRF_INTERFACE_PORT_FOR_SBI=80 - TZ=Europe/Paris
- NRF_INTERFACE_HTTP2_PORT_FOR_SBI=9090
- NRF_API_VERSION=v1
- INSTANCE=0
- PID_DIRECTORY=/var/run
networks: networks:
core_net: core_net:
ipv4_address: 192.168.71.130 ipv4_address: 192.168.71.130
volumes:
- ../5g_rfsimulator/nrf-healthcheck.sh:/openair-nrf/bin/nrf-healthcheck.sh
healthcheck:
test: /bin/bash -c "/openair-nrf/bin/nrf-healthcheck.sh"
interval: 10s
timeout: 5s
retries: 5
mysql: mysql:
container_name: "rfsim5g-mysql" container_name: "rfsim5g-mysql"
image: mysql:5.7 image: mysql:8.0
volumes: volumes:
- ../5g_rfsimulator/oai_db.sql:/docker-entrypoint-initdb.d/oai_db.sql - ../5g_rfsimulator/oai_db.sql:/docker-entrypoint-initdb.d/oai_db.sql
- ../5g_rfsimulator/mysql-healthcheck.sh:/tmp/mysql-healthcheck.sh - ../5g_rfsimulator/mysql-healthcheck.sh:/tmp/mysql-healthcheck.sh
@@ -37,18 +25,15 @@ services:
test: /bin/bash -c "/tmp/mysql-healthcheck.sh" test: /bin/bash -c "/tmp/mysql-healthcheck.sh"
interval: 10s interval: 10s
timeout: 5s timeout: 5s
retries: 5 retries: 30
networks: networks:
core_net: core_net:
ipv4_address: 192.168.71.131 ipv4_address: 192.168.71.131
oai-amf: oai-amf:
container_name: "rfsim5g-oai-amf" container_name: "rfsim5g-oai-amf"
image: oai-amf:august-dev image: oaisoftwarealliance/oai-amf:v1.5.0
environment: environment:
- TZ=Europe/paris - TZ=Europe/paris
- INSTANCE=0
- PID_DIRECTORY=/var/run
- MCC=208 - MCC=208
- MNC=99 - MNC=99
- REGION_ID=128 - REGION_ID=128
@@ -64,134 +49,85 @@ services:
- PLMN_SUPPORT_MCC=208 - PLMN_SUPPORT_MCC=208
- PLMN_SUPPORT_MNC=99 - PLMN_SUPPORT_MNC=99
- PLMN_SUPPORT_TAC=0x0001 - PLMN_SUPPORT_TAC=0x0001
# Only one slice is defined (1, 0xFFFFFF).
- SST_0=1 - SST_0=1
- SD_0=0xffffff
- SST_1=1
- SD_1=1
- AMF_INTERFACE_NAME_FOR_NGAP=eth0 - AMF_INTERFACE_NAME_FOR_NGAP=eth0
- AMF_INTERFACE_NAME_FOR_N11=eth0 - AMF_INTERFACE_NAME_FOR_N11=eth0
# One single SMF instance
- SMF_INSTANCE_ID_0=1 - SMF_INSTANCE_ID_0=1
- SMF_FQDN_0=oai-smf - SMF_FQDN_0=oai-smf
- SMF_IPV4_ADDR_0=0.0.0.0 - SMF_IPV4_ADDR_0=192.168.71.133
- SMF_HTTP_VERSION_0=v1
- SELECTED_0=true - SELECTED_0=true
- SMF_INSTANCE_ID_1=2 # mysql definition in AMF is mandatory in mini deployment.
- SMF_FQDN_1=oai-smf
- SMF_IPV4_ADDR_1=0.0.0.0
- SMF_HTTP_VERSION_1=v1
- SELECTED_1=false
- MYSQL_SERVER=192.168.71.131 - MYSQL_SERVER=192.168.71.131
- MYSQL_USER=root - MYSQL_USER=root
- MYSQL_PASS=linux - MYSQL_PASS=linux
- MYSQL_DB=oai_db - MYSQL_DB=oai_db
- OPERATOR_KEY=c42449363bbad02b66d16bc975d77cc1 # NF registration
- NRF_IPV4_ADDRESS=192.168.71.130 - NRF_IPV4_ADDRESS=192.168.71.130
- NRF_PORT=80 - NRF_FQDN=oai-nrf
- NF_REGISTRATION=yes - NF_REGISTRATION=yes
- SMF_SELECTION=yes - SMF_SELECTION=yes
- USE_FQDN_DNS=yes - USE_FQDN_DNS=yes
- NRF_API_VERSION=v1 - USE_HTTP2=no
- NRF_FQDN=oai-nrf
- EXTERNAL_AUSF=no
- AUSF_IPV4_ADDRESS=0.0.0.0
- AUSF_PORT=80
- AUSF_API_VERSION=v1
- AUSF_FQDN=localhost
depends_on: depends_on:
- oai-nrf - oai-nrf
- mysql - mysql
volumes:
- ../5g_rfsimulator/amf-healthcheck.sh:/openair-amf/bin/amf-healthcheck.sh
healthcheck:
test: /bin/bash -c "/openair-amf/bin/amf-healthcheck.sh"
interval: 10s
timeout: 15s
retries: 5
networks: networks:
core_net: core_net:
ipv4_address: 192.168.71.132 ipv4_address: 192.168.71.132
oai-smf: oai-smf:
container_name: "rfsim5g-oai-smf" container_name: "rfsim5g-oai-smf"
image: oai-smf:august-dev image: oaisoftwarealliance/oai-smf:v1.5.0
environment: environment:
- TZ=Europe/Paris - TZ=Europe/Paris
- INSTANCE=0
- PID_DIRECTORY=/var/run
- SMF_INTERFACE_NAME_FOR_N4=eth0 - SMF_INTERFACE_NAME_FOR_N4=eth0
- SMF_INTERFACE_NAME_FOR_SBI=eth0 - SMF_INTERFACE_NAME_FOR_SBI=eth0
- SMF_INTERFACE_PORT_FOR_SBI=80
- SMF_INTERFACE_HTTP2_PORT_FOR_SBI=9090
- SMF_API_VERSION=v1
- DEFAULT_DNS_IPV4_ADDRESS=172.21.3.100 - DEFAULT_DNS_IPV4_ADDRESS=172.21.3.100
- DEFAULT_DNS_SEC_IPV4_ADDRESS=4.4.4.4 - DEFAULT_DNS_SEC_IPV4_ADDRESS=4.4.4.4
- AMF_IPV4_ADDRESS=0.0.0.0 - AMF_IPV4_ADDRESS=192.168.71.132
- AMF_PORT=80
- AMF_API_VERSION=v1
- AMF_FQDN=oai-amf - AMF_FQDN=oai-amf
- UDM_IPV4_ADDRESS=127.0.0.1
- UDM_PORT=80
- UDM_API_VERSION=v1
- UDM_FQDN=localhost
- UPF_IPV4_ADDRESS=192.168.71.134 - UPF_IPV4_ADDRESS=192.168.71.134
- UPF_FQDN_0=oai-spgwu - UPF_FQDN_0=oai-spgwu
- NRF_IPV4_ADDRESS=192.168.71.130 - NRF_IPV4_ADDRESS=192.168.71.130
- NRF_PORT=80
- NRF_API_VERSION=v1
- NRF_FQDN=oai-nrf - NRF_FQDN=oai-nrf
- REGISTER_NRF=yes - REGISTER_NRF=yes
- DISCOVER_UPF=yes - DISCOVER_UPF=yes
- USE_FQDN_DNS=yes - USE_FQDN_DNS=yes
- USE_LOCAL_SUBSCRIPTION_INFO=yes
- UE_MTU=1500
# Only one slice is defined (1, 0xFFFFFF)
- DNN_NI0=oai - DNN_NI0=oai
- TYPE0=IPv4 - TYPE0=IPv4
- DNN_RANGE0=12.1.1.2 - 12.1.1.127 - DNN_RANGE0=12.1.1.2 - 12.1.1.127
- NSSAI_SST0=1 - NSSAI_SST0=1
- NSSAI_SD0=0xFFFFFF
- SESSION_AMBR_UL0=200Mbps - SESSION_AMBR_UL0=200Mbps
- SESSION_AMBR_DL0=400Mbps - SESSION_AMBR_DL0=400Mbps
- DNN_NI2=oai.ipv4 - DEFAULT_CSCF_IPV4_ADDRESS=127.0.0.1
- ENABLE_USAGE_REPORTING=no
depends_on: depends_on:
- oai-nrf - oai-nrf
- oai-amf - oai-amf
volumes:
- ../5g_rfsimulator/smf-healthcheck.sh:/openair-smf/bin/smf-healthcheck.sh
healthcheck:
test: /bin/bash -c "/openair-smf/bin/smf-healthcheck.sh"
interval: 10s
timeout: 5s
retries: 5
networks: networks:
core_net: core_net:
ipv4_address: 192.168.71.133 ipv4_address: 192.168.71.133
oai-spgwu: oai-spgwu:
container_name: "rfsim5g-oai-spgwu" container_name: "rfsim5g-oai-spgwu"
image: oai-spgwu-tiny:august-dev image: oaisoftwarealliance/oai-spgwu-tiny:v1.5.0
environment: environment:
- TZ=Europe/Paris - TZ=Europe/Paris
- PID_DIRECTORY=/var/run
- SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP=eth0 - SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP=eth0
- SGW_INTERFACE_NAME_FOR_SX=eth0 - SGW_INTERFACE_NAME_FOR_SX=eth0
- PGW_INTERFACE_NAME_FOR_SGI=eth0 - PGW_INTERFACE_NAME_FOR_SGI=eth0
- NETWORK_UE_NAT_OPTION=yes - NETWORK_UE_NAT_OPTION=yes
- NETWORK_UE_IP=12.1.1.0/24 - NETWORK_UE_IP=12.1.1.0/24
- SPGWC0_IP_ADDRESS=192.168.71.133
- BYPASS_UL_PFCP_RULES=no
- MCC=208
- MNC=99
- MNC03=099
- TAC=1
- GTP_EXTENSION_HEADER_PRESENT=yes
- GW_ID=1
- REALM=openairinterface.org
- ENABLE_5G_FEATURES=yes - ENABLE_5G_FEATURES=yes
- REGISTER_NRF=yes - REGISTER_NRF=yes
- USE_FQDN_NRF=yes - USE_FQDN_NRF=yes
- UPF_FQDN_5G=oai-spgwu - UPF_FQDN_5G=oai-spgwu
- NRF_IPV4_ADDRESS=192.168.71.130 - NRF_IPV4_ADDRESS=192.168.71.130
- NRF_PORT=80
- NRF_API_VERSION=v1
- NRF_FQDN=oai-nrf - NRF_FQDN=oai-nrf
# Only one slice is defined (1, 0xFFFFFF)
- NSSAI_SST_0=1 - NSSAI_SST_0=1
- NSSAI_SD_0=0xffffff - NSSAI_SD_0=0xffffff
- DNN_0=oai - DNN_0=oai
@@ -204,13 +140,6 @@ services:
cap_drop: cap_drop:
- ALL - ALL
privileged: true privileged: true
volumes:
- ../5g_rfsimulator/spgwu-healthcheck.sh:/openair-spgwu-tiny/bin/spgwu-healthcheck.sh
healthcheck:
test: /bin/bash -c "/openair-spgwu-tiny/bin/spgwu-healthcheck.sh"
interval: 10s
timeout: 5s
retries: 5
networks: networks:
core_net: core_net:
ipv4_address: 192.168.71.134 ipv4_address: 192.168.71.134
@@ -218,11 +147,10 @@ services:
ipv4_address: 192.168.73.134 ipv4_address: 192.168.73.134
oai-ext-dn: oai-ext-dn:
image: ubuntu:bionic
privileged: true privileged: true
container_name: rfsim5g-oai-ext-dn container_name: rfsim5g-oai-ext-dn
image: oaisoftwarealliance/trf-gen-cn5g:latest
entrypoint: /bin/bash -c \ entrypoint: /bin/bash -c \
"apt update; apt install -y procps iptables iproute2 iperf iputils-ping;"\
"iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE;"\ "iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE;"\
"ip route add 12.1.1.0/24 via 192.168.73.134 dev eth0; sleep infinity" "ip route add 12.1.1.0/24 via 192.168.73.134 dev eth0; sleep infinity"
depends_on: depends_on:
@@ -237,7 +165,7 @@ services:
retries: 5 retries: 5
oai-cucp: oai-cucp:
image: oai-gnb:develop image: oaisoftwarealliance/oai-gnb:develop
privileged: true privileged: true
container_name: rfsim5g-oai-cucp container_name: rfsim5g-oai-cucp
environment: environment:
@@ -259,7 +187,7 @@ services:
retries: 5 retries: 5
oai-cuup: oai-cuup:
image: oai-nr-cuup:develop image: oaisoftwarealliance/oai-nr-cuup:develop
privileged: true privileged: true
container_name: rfsim5g-oai-cuup container_name: rfsim5g-oai-cuup
environment: environment:
@@ -282,7 +210,7 @@ services:
retries: 5 retries: 5
oai-du: oai-du:
image: oai-gnb:develop image: oaisoftwarealliance/oai-gnb:develop
privileged: true privileged: true
container_name: rfsim5g-oai-du container_name: rfsim5g-oai-du
environment: environment:
@@ -301,7 +229,7 @@ services:
retries: 5 retries: 5
oai-nr-ue: oai-nr-ue:
image: oai-nr-ue:develop image: oaisoftwarealliance/oai-nr-ue:develop
privileged: true privileged: true
container_name: rfsim5g-oai-nr-ue container_name: rfsim5g-oai-nr-ue
environment: environment:
@@ -1,7 +1,7 @@
version: '3.8' version: '3.8'
services: services:
oai-gnb: oai-gnb:
image: oai-gnb:develop image: oaisoftwarealliance/oai-gnb:develop
privileged: true privileged: true
container_name: rfsim5g-oai-gnb container_name: rfsim5g-oai-gnb
environment: environment:
@@ -21,7 +21,7 @@ services:
retries: 5 retries: 5
oai-nr-ue: oai-nr-ue:
image: oai-nr-ue:develop image: oaisoftwarealliance/oai-nr-ue:develop
privileged: true privileged: true
container_name: rfsim5g-oai-nr-ue container_name: rfsim5g-oai-nr-ue
environment: environment:
@@ -1,7 +1,7 @@
version: '3.8' version: '3.8'
services: services:
oai-gnb: oai-gnb:
image: oai-gnb:develop image: oaisoftwarealliance/oai-gnb:develop
privileged: true privileged: true
container_name: rfsim5g-oai-gnb container_name: rfsim5g-oai-gnb
environment: environment:
@@ -21,7 +21,7 @@ services:
retries: 5 retries: 5
oai-nr-ue: oai-nr-ue:
image: oai-nr-ue:develop image: oaisoftwarealliance/oai-nr-ue:develop
privileged: true privileged: true
container_name: rfsim5g-oai-nr-ue container_name: rfsim5g-oai-nr-ue
environment: environment:
@@ -1,7 +1,7 @@
version: '3.8' version: '3.8'
services: services:
oai-gnb: oai-gnb:
image: oai-gnb:develop image: oaisoftwarealliance/oai-gnb:develop
privileged: true privileged: true
container_name: rfsim5g-oai-gnb container_name: rfsim5g-oai-gnb
environment: environment:
@@ -21,7 +21,7 @@ services:
retries: 5 retries: 5
oai-nr-ue: oai-nr-ue:
image: oai-nr-ue:develop image: oaisoftwarealliance/oai-nr-ue:develop
privileged: true privileged: true
container_name: rfsim5g-oai-nr-ue container_name: rfsim5g-oai-nr-ue
environment: environment:
@@ -2,28 +2,16 @@ version: '3.8'
services: services:
oai-nrf: oai-nrf:
container_name: "rfsim5g-oai-nrf" container_name: "rfsim5g-oai-nrf"
image: oai-nrf:august-dev image: oaisoftwarealliance/oai-nrf:v1.5.0
environment: environment:
- NRF_INTERFACE_NAME_FOR_SBI=eth0 - NRF_INTERFACE_NAME_FOR_SBI=eth0
- NRF_INTERFACE_PORT_FOR_SBI=80 - TZ=Europe/Paris
- NRF_INTERFACE_HTTP2_PORT_FOR_SBI=9090
- NRF_API_VERSION=v1
- INSTANCE=0
- PID_DIRECTORY=/var/run
networks: networks:
public_net: public_net:
ipv4_address: 192.168.71.130 ipv4_address: 192.168.71.130
volumes:
- ../5g_rfsimulator/nrf-healthcheck.sh:/openair-nrf/bin/nrf-healthcheck.sh
healthcheck:
test: /bin/bash -c "/openair-nrf/bin/nrf-healthcheck.sh"
interval: 10s
timeout: 5s
retries: 5
mysql: mysql:
container_name: "rfsim5g-mysql" container_name: "rfsim5g-mysql"
image: mysql:5.7 image: mysql:8.0
volumes: volumes:
- ../5g_rfsimulator/oai_db.sql:/docker-entrypoint-initdb.d/oai_db.sql - ../5g_rfsimulator/oai_db.sql:/docker-entrypoint-initdb.d/oai_db.sql
- ../5g_rfsimulator/mysql-healthcheck.sh:/tmp/mysql-healthcheck.sh - ../5g_rfsimulator/mysql-healthcheck.sh:/tmp/mysql-healthcheck.sh
@@ -37,18 +25,15 @@ services:
test: /bin/bash -c "/tmp/mysql-healthcheck.sh" test: /bin/bash -c "/tmp/mysql-healthcheck.sh"
interval: 10s interval: 10s
timeout: 5s timeout: 5s
retries: 5 retries: 30
networks: networks:
public_net: public_net:
ipv4_address: 192.168.71.131 ipv4_address: 192.168.71.131
oai-amf: oai-amf:
container_name: "rfsim5g-oai-amf" container_name: "rfsim5g-oai-amf"
image: oai-amf:august-dev image: oaisoftwarealliance/oai-amf:v1.5.0
environment: environment:
- TZ=Europe/paris - TZ=Europe/paris
- INSTANCE=0
- PID_DIRECTORY=/var/run
- MCC=208 - MCC=208
- MNC=99 - MNC=99
- REGION_ID=128 - REGION_ID=128
@@ -64,134 +49,85 @@ services:
- PLMN_SUPPORT_MCC=208 - PLMN_SUPPORT_MCC=208
- PLMN_SUPPORT_MNC=99 - PLMN_SUPPORT_MNC=99
- PLMN_SUPPORT_TAC=0x0001 - PLMN_SUPPORT_TAC=0x0001
# Only one slice is defined (1, 0xFFFFFF).
- SST_0=1 - SST_0=1
- SD_0=0xffffff
- SST_1=1
- SD_1=1
- AMF_INTERFACE_NAME_FOR_NGAP=eth0 - AMF_INTERFACE_NAME_FOR_NGAP=eth0
- AMF_INTERFACE_NAME_FOR_N11=eth0 - AMF_INTERFACE_NAME_FOR_N11=eth0
# One single SMF instance
- SMF_INSTANCE_ID_0=1 - SMF_INSTANCE_ID_0=1
- SMF_FQDN_0=oai-smf - SMF_FQDN_0=oai-smf
- SMF_IPV4_ADDR_0=0.0.0.0 - SMF_IPV4_ADDR_0=192.168.71.133
- SMF_HTTP_VERSION_0=v1
- SELECTED_0=true - SELECTED_0=true
- SMF_INSTANCE_ID_1=2 # mysql definition in AMF is mandatory in mini deployment.
- SMF_FQDN_1=oai-smf
- SMF_IPV4_ADDR_1=0.0.0.0
- SMF_HTTP_VERSION_1=v1
- SELECTED_1=false
- MYSQL_SERVER=192.168.71.131 - MYSQL_SERVER=192.168.71.131
- MYSQL_USER=root - MYSQL_USER=root
- MYSQL_PASS=linux - MYSQL_PASS=linux
- MYSQL_DB=oai_db - MYSQL_DB=oai_db
- OPERATOR_KEY=c42449363bbad02b66d16bc975d77cc1 # NF registration
- NRF_IPV4_ADDRESS=192.168.71.130 - NRF_IPV4_ADDRESS=192.168.71.130
- NRF_PORT=80 - NRF_FQDN=oai-nrf
- NF_REGISTRATION=yes - NF_REGISTRATION=yes
- SMF_SELECTION=yes - SMF_SELECTION=yes
- USE_FQDN_DNS=yes - USE_FQDN_DNS=yes
- NRF_API_VERSION=v1 - USE_HTTP2=no
- NRF_FQDN=oai-nrf
- EXTERNAL_AUSF=no
- AUSF_IPV4_ADDRESS=0.0.0.0
- AUSF_PORT=80
- AUSF_API_VERSION=v1
- AUSF_FQDN=localhost
depends_on: depends_on:
- oai-nrf - oai-nrf
- mysql - mysql
volumes:
- ../5g_rfsimulator/amf-healthcheck.sh:/openair-amf/bin/amf-healthcheck.sh
healthcheck:
test: /bin/bash -c "/openair-amf/bin/amf-healthcheck.sh"
interval: 10s
timeout: 15s
retries: 5
networks: networks:
public_net: public_net:
ipv4_address: 192.168.71.132 ipv4_address: 192.168.71.132
oai-smf: oai-smf:
container_name: "rfsim5g-oai-smf" container_name: "rfsim5g-oai-smf"
image: oai-smf:august-dev image: oaisoftwarealliance/oai-smf:v1.5.0
environment: environment:
- TZ=Europe/Paris - TZ=Europe/Paris
- INSTANCE=0
- PID_DIRECTORY=/var/run
- SMF_INTERFACE_NAME_FOR_N4=eth0 - SMF_INTERFACE_NAME_FOR_N4=eth0
- SMF_INTERFACE_NAME_FOR_SBI=eth0 - SMF_INTERFACE_NAME_FOR_SBI=eth0
- SMF_INTERFACE_PORT_FOR_SBI=80
- SMF_INTERFACE_HTTP2_PORT_FOR_SBI=9090
- SMF_API_VERSION=v1
- DEFAULT_DNS_IPV4_ADDRESS=172.21.3.100 - DEFAULT_DNS_IPV4_ADDRESS=172.21.3.100
- DEFAULT_DNS_SEC_IPV4_ADDRESS=4.4.4.4 - DEFAULT_DNS_SEC_IPV4_ADDRESS=4.4.4.4
- AMF_IPV4_ADDRESS=0.0.0.0 - AMF_IPV4_ADDRESS=192.168.71.132
- AMF_PORT=80
- AMF_API_VERSION=v1
- AMF_FQDN=oai-amf - AMF_FQDN=oai-amf
- UDM_IPV4_ADDRESS=127.0.0.1
- UDM_PORT=80
- UDM_API_VERSION=v1
- UDM_FQDN=localhost
- UPF_IPV4_ADDRESS=192.168.71.134 - UPF_IPV4_ADDRESS=192.168.71.134
- UPF_FQDN_0=oai-spgwu - UPF_FQDN_0=oai-spgwu
- NRF_IPV4_ADDRESS=192.168.71.130 - NRF_IPV4_ADDRESS=192.168.71.130
- NRF_PORT=80
- NRF_API_VERSION=v1
- NRF_FQDN=oai-nrf - NRF_FQDN=oai-nrf
- REGISTER_NRF=yes - REGISTER_NRF=yes
- DISCOVER_UPF=yes - DISCOVER_UPF=yes
- USE_FQDN_DNS=yes - USE_FQDN_DNS=yes
- USE_LOCAL_SUBSCRIPTION_INFO=yes
- UE_MTU=1500
# Only one slice is defined (1, 0xFFFFFF)
- DNN_NI0=oai - DNN_NI0=oai
- TYPE0=IPv4 - TYPE0=IPv4
- DNN_RANGE0=12.1.1.2 - 12.1.1.127 - DNN_RANGE0=12.1.1.2 - 12.1.1.127
- NSSAI_SST0=1 - NSSAI_SST0=1
- NSSAI_SD0=0xFFFFFF
- SESSION_AMBR_UL0=200Mbps - SESSION_AMBR_UL0=200Mbps
- SESSION_AMBR_DL0=400Mbps - SESSION_AMBR_DL0=400Mbps
- DNN_NI2=oai.ipv4 - DEFAULT_CSCF_IPV4_ADDRESS=127.0.0.1
- ENABLE_USAGE_REPORTING=no
depends_on: depends_on:
- oai-nrf - oai-nrf
- oai-amf - oai-amf
volumes:
- ../5g_rfsimulator/smf-healthcheck.sh:/openair-smf/bin/smf-healthcheck.sh
healthcheck:
test: /bin/bash -c "/openair-smf/bin/smf-healthcheck.sh"
interval: 10s
timeout: 5s
retries: 5
networks: networks:
public_net: public_net:
ipv4_address: 192.168.71.133 ipv4_address: 192.168.71.133
oai-spgwu: oai-spgwu:
container_name: "rfsim5g-oai-spgwu" container_name: "rfsim5g-oai-spgwu"
image: oai-spgwu-tiny:august-dev image: oaisoftwarealliance/oai-spgwu-tiny:v1.5.0
environment: environment:
- TZ=Europe/Paris - TZ=Europe/Paris
- PID_DIRECTORY=/var/run
- SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP=eth0 - SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP=eth0
- SGW_INTERFACE_NAME_FOR_SX=eth0 - SGW_INTERFACE_NAME_FOR_SX=eth0
- PGW_INTERFACE_NAME_FOR_SGI=eth0 - PGW_INTERFACE_NAME_FOR_SGI=eth0
- NETWORK_UE_NAT_OPTION=yes - NETWORK_UE_NAT_OPTION=yes
- NETWORK_UE_IP=12.1.1.0/24 - NETWORK_UE_IP=12.1.1.0/24
- SPGWC0_IP_ADDRESS=192.168.71.133
- BYPASS_UL_PFCP_RULES=no
- MCC=208
- MNC=99
- MNC03=099
- TAC=1
- GTP_EXTENSION_HEADER_PRESENT=yes
- GW_ID=1
- REALM=openairinterface.org
- ENABLE_5G_FEATURES=yes - ENABLE_5G_FEATURES=yes
- REGISTER_NRF=yes - REGISTER_NRF=yes
- USE_FQDN_NRF=yes - USE_FQDN_NRF=yes
- UPF_FQDN_5G=oai-spgwu - UPF_FQDN_5G=oai-spgwu
- NRF_IPV4_ADDRESS=192.168.71.130 - NRF_IPV4_ADDRESS=192.168.71.130
- NRF_PORT=80
- NRF_API_VERSION=v1
- NRF_FQDN=oai-nrf - NRF_FQDN=oai-nrf
# Only one slice is defined (1, 0xFFFFFF)
- NSSAI_SST_0=1 - NSSAI_SST_0=1
- NSSAI_SD_0=0xffffff - NSSAI_SD_0=0xffffff
- DNN_0=oai - DNN_0=oai
@@ -204,25 +140,16 @@ services:
cap_drop: cap_drop:
- ALL - ALL
privileged: true privileged: true
volumes:
- ../5g_rfsimulator/spgwu-healthcheck.sh:/openair-spgwu-tiny/bin/spgwu-healthcheck.sh
healthcheck:
test: /bin/bash -c "/openair-spgwu-tiny/bin/spgwu-healthcheck.sh"
interval: 10s
timeout: 5s
retries: 5
networks: networks:
public_net: public_net:
ipv4_address: 192.168.71.134 ipv4_address: 192.168.71.134
traffic_net: traffic_net:
ipv4_address: 192.168.72.134 ipv4_address: 192.168.72.134
oai-ext-dn: oai-ext-dn:
image: ubuntu:bionic
privileged: true privileged: true
container_name: rfsim5g-oai-ext-dn container_name: rfsim5g-oai-ext-dn
image: oaisoftwarealliance/trf-gen-cn5g:latest
entrypoint: /bin/bash -c \ entrypoint: /bin/bash -c \
"apt update; apt install -y procps iptables iproute2 iperf iputils-ping;"\
"iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE;"\ "iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE;"\
"ip route add 12.1.1.0/24 via 192.168.72.134 dev eth0; sleep infinity" "ip route add 12.1.1.0/24 via 192.168.72.134 dev eth0; sleep infinity"
depends_on: depends_on:
@@ -235,9 +162,8 @@ services:
interval: 10s interval: 10s
timeout: 5s timeout: 5s
retries: 5 retries: 5
oai-gnb: oai-gnb:
image: oai-gnb:develop image: oaisoftwarealliance/oai-gnb:develop
privileged: true privileged: true
container_name: rfsim5g-oai-gnb container_name: rfsim5g-oai-gnb
environment: environment:
@@ -258,7 +184,7 @@ services:
retries: 5 retries: 5
oai-nr-ue: oai-nr-ue:
image: oai-nr-ue:develop image: oaisoftwarealliance/oai-nr-ue:develop
privileged: true privileged: true
container_name: rfsim5g-oai-nr-ue container_name: rfsim5g-oai-nr-ue
environment: environment:
+9 -6
View File
@@ -55,7 +55,7 @@ CMAKE_BUILD_TYPE="RelWithDebInfo"
CMAKE_CMD="$CMAKE" CMAKE_CMD="$CMAKE"
BUILD_ECLIPSE=0 BUILD_ECLIPSE=0
NR="False" NR="False"
OPTIONAL_LIBRARIES="telnetsrv enbscope uescope nrscope" OPTIONAL_LIBRARIES="telnetsrv enbscope uescope nrscope ldpc_cuda ldpc_t1"
ulfiusdep=$(basename ./`find /usr/lib* -name libulfius.so`) ulfiusdep=$(basename ./`find /usr/lib* -name libulfius.so`)
jssondep=$(basename ./`find /usr/lib* -name libjansson.so`) jssondep=$(basename ./`find /usr/lib* -name libjansson.so`)
if [ "$ulfiusdep" == "libulfius.so" -a "$jssondep" == "libjansson.so" ] ; then if [ "$ulfiusdep" == "libulfius.so" -a "$jssondep" == "libjansson.so" ] ; then
@@ -392,13 +392,16 @@ function main() {
if [ "$alib" = "$oklib" ] ; then if [ "$alib" = "$oklib" ] ; then
BUILD_OPTLIB="$BUILD_OPTLIB $alib" BUILD_OPTLIB="$BUILD_OPTLIB $alib"
echo_info "Enabling build of lib${alib}.so" echo_info "Enabling build of lib${alib}.so"
fi fi
done done
done done
if [ "${BUILD_OPTLIB## }" != "$2" ] ; then if [ "${BUILD_OPTLIB## }" != "$2" ] ; then
echo_fatal "Unknown optional library in $2, valid libraries are $OPTIONAL_LIBRARIES" echo_fatal "Unknown optional library in $2, valid libraries are $OPTIONAL_LIBRARIES"
fi fi
fi fi
for oklib in $BUILD_OPTLIB ; do
CMAKE_CMD="$CMAKE_CMD -DENABLE_${oklib^^}=ON"
done
shift 2;; shift 2;;
--noavx512) --noavx512)
CMAKE_CMD="$CMAKE_CMD -DAVX512=OFF" CMAKE_CMD="$CMAKE_CMD -DAVX512=OFF"
+48 -49
View File
@@ -296,55 +296,54 @@ typedef struct {
//TASK_DEF(TASK_GTPV1_U, TASK_PRIORITY_MED, 1000,NULL, NULL) //TASK_DEF(TASK_GTPV1_U, TASK_PRIORITY_MED, 1000,NULL, NULL)
//TASK_DEF(TASK_UDP, TASK_PRIORITY_MED, 1000, NULL, NULL) //TASK_DEF(TASK_UDP, TASK_PRIORITY_MED, 1000, NULL, NULL)
void *rrc_enb_process_msg(void *); void *rrc_enb_process_msg(void *);
#define FOREACH_TASK(TASK_DEF) \ #define FOREACH_TASK(TASK_DEF) \
TASK_DEF(TASK_UNKNOWN, TASK_PRIORITY_MED, 50, NULL, NULL) \ TASK_DEF(TASK_UNKNOWN, TASK_PRIORITY_MED, 50, NULL, NULL) \
TASK_DEF(TASK_TIMER, TASK_PRIORITY_MED, 10, NULL, NULL) \ TASK_DEF(TASK_TIMER, TASK_PRIORITY_MED, 10, NULL, NULL) \
TASK_DEF(TASK_L2L1, TASK_PRIORITY_MAX, 200, NULL, NULL) \ TASK_DEF(TASK_L2L1, TASK_PRIORITY_MAX, 200, NULL, NULL) \
TASK_DEF(TASK_BM, TASK_PRIORITY_MED, 200, NULL, NULL) \ TASK_DEF(TASK_BM, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_PHY_ENB, TASK_PRIORITY_MED, 200, NULL, NULL) \ TASK_DEF(TASK_PHY_ENB, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_MAC_ENB, TASK_PRIORITY_MED, 200, NULL, NULL) \ TASK_DEF(TASK_MAC_GNB, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_MAC_GNB, TASK_PRIORITY_MED, 200, NULL, NULL) \ TASK_DEF(TASK_RLC_ENB, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_RLC_ENB, TASK_PRIORITY_MED, 200, NULL, NULL) \ TASK_DEF(TASK_RRC_ENB_NB_IoT, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_RRC_ENB_NB_IoT, TASK_PRIORITY_MED, 200, NULL, NULL) \ TASK_DEF(TASK_PDCP_ENB, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_PDCP_ENB, TASK_PRIORITY_MED, 200, NULL, NULL) \ TASK_DEF(TASK_PDCP_GNB, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_PDCP_GNB, TASK_PRIORITY_MED, 200, NULL, NULL) \ TASK_DEF(TASK_DATA_FORWARDING, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_DATA_FORWARDING, TASK_PRIORITY_MED, 200, NULL, NULL) \ TASK_DEF(TASK_END_MARKER, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_END_MARKER, TASK_PRIORITY_MED, 200, NULL, NULL) \ TASK_DEF(TASK_RRC_ENB, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_RRC_ENB, TASK_PRIORITY_MED, 200, NULL,NULL)\ TASK_DEF(TASK_RRC_GNB, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_RRC_GNB, TASK_PRIORITY_MED, 200, NULL,NULL)\ TASK_DEF(TASK_RAL_ENB, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_RAL_ENB, TASK_PRIORITY_MED, 200, NULL, NULL) \ TASK_DEF(TASK_S1AP, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_S1AP, TASK_PRIORITY_MED, 200, NULL, NULL) \ TASK_DEF(TASK_NGAP, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_NGAP, TASK_PRIORITY_MED, 200, NULL, NULL) \ TASK_DEF(TASK_X2AP, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_X2AP, TASK_PRIORITY_MED, 200, NULL, NULL) \ TASK_DEF(TASK_M2AP_ENB, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_M2AP_ENB, TASK_PRIORITY_MED, 200, NULL, NULL) \ TASK_DEF(TASK_M2AP_MCE, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_M2AP_MCE, TASK_PRIORITY_MED, 200, NULL, NULL) \ TASK_DEF(TASK_M3AP, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_M3AP, TASK_PRIORITY_MED, 200, NULL, NULL) \ TASK_DEF(TASK_M3AP_MME, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_M3AP_MME, TASK_PRIORITY_MED, 200, NULL, NULL) \ TASK_DEF(TASK_M3AP_MCE, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_M3AP_MCE, TASK_PRIORITY_MED, 200, NULL, NULL) \ TASK_DEF(TASK_SCTP, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_SCTP, TASK_PRIORITY_MED, 200, NULL, NULL) \ TASK_DEF(TASK_ENB_APP, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_ENB_APP, TASK_PRIORITY_MED, 200, NULL, NULL) \ TASK_DEF(TASK_GNB_APP, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_GNB_APP, TASK_PRIORITY_MED, 200, NULL, NULL) \ TASK_DEF(TASK_MCE_APP, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_MCE_APP, TASK_PRIORITY_MED, 200, NULL, NULL) \ TASK_DEF(TASK_MME_APP, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_MME_APP, TASK_PRIORITY_MED, 200, NULL, NULL) \ TASK_DEF(TASK_PHY_UE, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_PHY_UE, TASK_PRIORITY_MED, 200, NULL, NULL) \ TASK_DEF(TASK_MAC_UE, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_MAC_UE, TASK_PRIORITY_MED, 200, NULL, NULL) \ TASK_DEF(TASK_RLC_UE, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_RLC_UE, TASK_PRIORITY_MED, 200, NULL, NULL) \ TASK_DEF(TASK_PDCP_UE, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_PDCP_UE, TASK_PRIORITY_MED, 200, NULL, NULL) \ TASK_DEF(TASK_RRC_UE, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_RRC_UE, TASK_PRIORITY_MED, 200, NULL, NULL) \ TASK_DEF(TASK_RRC_NRUE, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_RRC_NRUE, TASK_PRIORITY_MED, 200, NULL, NULL) \ TASK_DEF(TASK_NAS_UE, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_NAS_UE, TASK_PRIORITY_MED, 200, NULL, NULL) \ TASK_DEF(TASK_RAL_UE, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_RAL_UE, TASK_PRIORITY_MED, 200, NULL, NULL) \ TASK_DEF(TASK_GTPV1_U, TASK_PRIORITY_MED, 1000, NULL, NULL) \
TASK_DEF(TASK_GTPV1_U, TASK_PRIORITY_MED, 1000,NULL, NULL)\ TASK_DEF(TASK_CU_F1, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_CU_F1, TASK_PRIORITY_MED, 200, NULL, NULL) \ TASK_DEF(TASK_DU_F1, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_DU_F1, TASK_PRIORITY_MED, 200, NULL, NULL) \ TASK_DEF(TASK_CUCP_E1, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_CUCP_E1, TASK_PRIORITY_MED, 200, NULL, NULL) \ TASK_DEF(TASK_CUUP_E1, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_CUUP_E1, TASK_PRIORITY_MED, 200, NULL, NULL) \ TASK_DEF(TASK_RRC_UE_SIM, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_RRC_UE_SIM, TASK_PRIORITY_MED, 200, NULL, NULL) \ TASK_DEF(TASK_RRC_GNB_SIM, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_RRC_GNB_SIM, TASK_PRIORITY_MED, 200, NULL, NULL) \ TASK_DEF(TASK_RRC_NSA_UE, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_RRC_NSA_UE, TASK_PRIORITY_MED, 200, NULL, NULL) \ TASK_DEF(TASK_RRC_NSA_NRUE, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_RRC_NSA_NRUE, TASK_PRIORITY_MED, 200, NULL, NULL) \ TASK_DEF(TASK_NAS_NRUE, TASK_PRIORITY_MED, 200, NULL, NULL) \
TASK_DEF(TASK_NAS_NRUE, TASK_PRIORITY_MED, 200, NULL, NULL) \ TASK_DEF(TASK_MAX, TASK_PRIORITY_MED, 200, NULL, NULL)
TASK_DEF(TASK_MAX, TASK_PRIORITY_MED, 200, NULL, NULL)
#define TASK_DEF(TaskID, pRIO, qUEUEsIZE, FuNc, ThreadFunc) { pRIO, qUEUEsIZE, #TaskID, FuNc, ThreadFunc }, #define TASK_DEF(TaskID, pRIO, qUEUEsIZE, FuNc, ThreadFunc) { pRIO, qUEUEsIZE, #TaskID, FuNc, ThreadFunc },
+31 -1
View File
@@ -12,6 +12,8 @@
</tr> </tr>
</table> </table>
## 4G L2 nFAPI simulator
This simulator allows to test L2 and above Layers using the nFAPI interface. This simulator allows to test L2 and above Layers using the nFAPI interface.
The UE executable is able to "simulate" multiple UEs in order to stimulate the scheduler in the eNB. The UE executable is able to "simulate" multiple UEs in order to stimulate the scheduler in the eNB.
@@ -38,7 +40,34 @@ Normally it should be fine to run both executables on the same host using the `l
**2022/03/08: Starting the `2022.w01` tag on the `develop` branch, the L2 nFAPI simulation is using a proxy.** **2022/03/08: Starting the `2022.w01` tag on the `develop` branch, the L2 nFAPI simulation is using a proxy.**
A tutorial is available on the [EpiSci GitHub Repository](https://github.com/EpiSci/oai-lte-5g-multi-ue-proxy#readme). ## 5G L2 nFAPI simulator
### Download and Build the Proxy Server (from EpiSci)
```bash
$ cd ~
$ git clone https://github.com/EpiSci/oai-lte-5g-multi-ue-proxy.git
$ cd oai-lte-multi-ue-proxy
$ make
```
### Start Proxy Server
Set the number of UEs to connect to server as 1 and the mode is SA.
```bash
$ number_of_ues=1
$ sudo -E ./build/proxy $number_of_ues --nr
```
### Start gNB
```bash
$ sudo -E ./nr-softmodem -O ../ci-scripts/conf_files/episci/proxy_rcc.band78.tm1.106PRB.nfapi.conf --nfapi VNF --noS1 --sa --emulate-l1
```
### Start UE
```bash
$ sudo -E ./nr-uesoftmodem -O ../ci-scripts/conf_files/episci/proxy_nr-ue.nfapi.conf --nokrnmod 1 --nfapi STANDALONE_PNF --node-number 2 --sa --emulate-l1
```
### EpiSci's Documentation
A more detailed tutorial is available on the [EpiSci GitHub Repository](https://github.com/EpiSci/oai-lte-5g-multi-ue-proxy#readme).
This proxy allows to perform L2 nFAPI simulator for: This proxy allows to perform L2 nFAPI simulator for:
@@ -46,6 +75,7 @@ This proxy allows to perform L2 nFAPI simulator for:
* 5G-NSA * 5G-NSA
* 5G-SA * 5G-SA
### L2 Simulator as Docker Containers
Another tutorial for 5G SA mode with 1 User is available [here](../ci-scripts/yaml_files/5g_l2sim_tdd/README.md). Another tutorial for 5G SA mode with 1 User is available [here](../ci-scripts/yaml_files/5g_l2sim_tdd/README.md).
---- ----
+1 -1
View File
@@ -144,7 +144,7 @@ cd cmake_targets
cd ~/openairinterface5g cd ~/openairinterface5g
source oaienv source oaienv
cd cmake_targets cd cmake_targets
./build_oai -w USRP --ninja --nrUE --gNB --build-lib all -c ./build_oai -w USRP --ninja --nrUE --gNB --build-lib "telnetsrv nrscope" -c
``` ```
# 4. Run OAI CN5G and OAI gNB # 4. Run OAI CN5G and OAI gNB
+1 -1
View File
@@ -35,4 +35,4 @@ COPY . .
RUN /bin/sh oaienv && \ RUN /bin/sh oaienv && \
cd cmake_targets && \ cd cmake_targets && \
mkdir -p log && \ mkdir -p log && \
./build_oai --eNB --gNB --RU --UE --nrUE --ninja --build-lib all -w USRP --verbose-ci --noavx512 -c ./build_oai --eNB --gNB --RU --UE --nrUE --ninja --build-lib "telnetsrv enbscope uescope nrscope" -w USRP --verbose-ci --noavx512 -c
+1 -1
View File
@@ -35,4 +35,4 @@ COPY . .
RUN /bin/sh oaienv && \ RUN /bin/sh oaienv && \
cd cmake_targets && \ cd cmake_targets && \
mkdir -p log && \ mkdir -p log && \
./build_oai --eNB --gNB --RU --UE --nrUE --ninja --build-lib all -w USRP --verbose-ci --noavx512 -c ./build_oai --eNB --gNB --RU --UE --nrUE --ninja --build-lib "telnetsrv enbscope uescope nrscope" -w USRP --verbose-ci --noavx512 -c
+5 -21
View File
@@ -37,9 +37,6 @@ RUN /bin/sh oaienv && \
cd cmake_targets/ran_build/build && \ cd cmake_targets/ran_build/build && \
ninja aw2sori_transpro ninja aw2sori_transpro
RUN python3 ./docker/scripts/generateTemplate.py ./docker/scripts/gnb_parameters.yaml && \
cp /oai-ran/docker/scripts/gnb_entrypoint.sh /oai-ran/docker/scripts/entrypoint.sh
#start from scratch for target executable #start from scratch for target executable
FROM registry.access.redhat.com/ubi8/ubi:latest as oai-gnb-aw2s FROM registry.access.redhat.com/ubi8/ubi:latest as oai-gnb-aw2s
ENV TZ=Europe/Paris ENV TZ=Europe/Paris
@@ -54,18 +51,15 @@ RUN yum repolist --disablerepo=* && \
lksctp-tools \ lksctp-tools \
tzdata \ tzdata \
net-tools \ net-tools \
iputils \ iputils && \
python3-pip && \
pip3 install six && \
pip3 install requests && \
echo "/usr/local/lib" > /etc/ld.so.conf.d/local-lib.conf && \ echo "/usr/local/lib" > /etc/ld.so.conf.d/local-lib.conf && \
echo "/usr/local/lib64" >> /etc/ld.so.conf.d/local-lib.conf echo "/usr/local/lib64" >> /etc/ld.so.conf.d/local-lib.conf
COPY ./libori.so /usr/local/lib
WORKDIR /opt/oai-gnb-aw2s/bin WORKDIR /opt/oai-gnb-aw2s/bin
COPY --from=gnb-build \ COPY --from=gnb-build /oai-ran/cmake_targets/ran_build/build/nr-softmodem ./
/oai-ran/cmake_targets/ran_build/build/nr-softmodem \ COPY ./docker/scripts/gnb-aw2s_entrypoint.sh /opt/oai-gnb-aw2s/bin/entrypoint.sh
/oai-ran/docker/scripts/entrypoint.sh \
./
COPY --from=gnb-build \ COPY --from=gnb-build \
/oai-ran/cmake_targets/ran_build/build/liboai_eth_transpro.so \ /oai-ran/cmake_targets/ran_build/build/liboai_eth_transpro.so \
@@ -92,17 +86,7 @@ COPY --from=gnb-base \
RUN ln -s /usr/local/lib/libaw2sori_transpro.so /usr/local/lib/libthirdparty_transpro.so && \ RUN ln -s /usr/local/lib/libaw2sori_transpro.so /usr/local/lib/libthirdparty_transpro.so && \
ldconfig ldconfig
# Copy the relevant configuration files for gNB
WORKDIR /opt/oai-gnb-aw2s/etc
COPY --from=gnb-build /oai-ran/docker/etc .
WORKDIR /opt/oai-gnb-aw2s WORKDIR /opt/oai-gnb-aw2s
#EXPOSE 2152/udp # S1U, GTP/UDP
#EXPOSE 22100/tcp # ?
#EXPOSE 36412/udp # S1C, SCTP/UDP
#EXPOSE 36422/udp # X2C, SCTP/UDP
#EXPOSE 50000/udp # IF5 / ORI (control)
#EXPOSE 50001/udp # IF5 / ECPRI (data)
ENTRYPOINT ["/opt/oai-gnb-aw2s/bin/entrypoint.sh"] ENTRYPOINT ["/opt/oai-gnb-aw2s/bin/entrypoint.sh"]
CMD ["/opt/oai-gnb-aw2s/bin/nr-softmodem", "-O", "/opt/oai-gnb-aw2s/etc/gnb.conf"] CMD ["/opt/oai-gnb-aw2s/bin/nr-softmodem", "-O", "/opt/oai-gnb-aw2s/etc/gnb.conf"]
+88
View File
@@ -0,0 +1,88 @@
#/*
# * 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
# */
#---------------------------------------------------------------------
#
# Dockerfile for the Open-Air-Interface BUILD service
# Valid for Ubuntu18.04
#
#---------------------------------------------------------------------
FROM ran-base:latest AS gnb-base
FROM ran-build:latest AS gnb-build
COPY ./libori.so /usr/local/lib/
# build AW2S fronthaul lib
WORKDIR /oai-ran
RUN /bin/sh oaienv && \
cd cmake_targets/ran_build/build && \
ninja aw2sori_transpro
#start from scratch for target executable
FROM ubuntu:bionic as oai-gnb-aw2s
ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=Europe
RUN apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get upgrade --yes && \
DEBIAN_FRONTEND=noninteractive apt-get install --yes \
procps \
libsctp1 \
tzdata \
libblas3 \
libatlas3-base \
libconfig9 \
openssl \
net-tools \
iproute2 \
iputils-ping && \
rm -rf /var/lib/apt/lists/*
COPY ./libori.so /usr/local/lib/
WORKDIR /opt/oai-gnb-aw2s/bin
COPY --from=gnb-build /oai-ran/cmake_targets/ran_build/build/nr-softmodem ./
COPY ./docker/scripts/gnb-aw2s_entrypoint.sh /opt/oai-gnb-aw2s/bin/entrypoint.sh
COPY --from=gnb-build \
/oai-ran/cmake_targets/ran_build/build/liboai_eth_transpro.so \
/oai-ran/cmake_targets/ran_build/build/librfsimulator.so \
/oai-ran/cmake_targets/ran_build/build/libaw2sori_transpro.so \
/oai-ran/cmake_targets/ran_build/build/libcoding.so \
/oai-ran/cmake_targets/ran_build/build/libparams_libconfig.so \
/oai-ran/cmake_targets/ran_build/build/libdfts.so \
/oai-ran/cmake_targets/ran_build/build/libldpc.so \
/oai-ran/cmake_targets/ran_build/build/libldpc_optim.so \
/oai-ran/cmake_targets/ran_build/build/libldpc_optim8seg.so \
/oai-ran/cmake_targets/ran_build/build/libldpc_orig.so \
/oai-ran/cmake_targets/ran_build/build/libtelnetsrv.so \
/usr/local/lib/
RUN /bin/bash -c "ln -s /usr/local/lib/libaw2sori_transpro.so /usr/local/lib/libthirdparty_transpro.so" && \
/bin/bash -c "ln -s /usr/local/lib/liboai_eth_transpro.so /usr/local/lib/liboai_transpro.so" && \
ldconfig
WORKDIR /opt/oai-gnb-aw2s
ENTRYPOINT ["/opt/oai-gnb-aw2s/bin/entrypoint.sh"]
CMD ["/opt/oai-gnb-aw2s/bin/nr-softmodem", "-O", "/opt/oai-gnb-aw2s/etc/gnb.conf"]
+39
View File
@@ -0,0 +1,39 @@
#!/bin/bash
set -uo pipefail
PREFIX=/opt/oai-gnb-aw2s
if [[ -v USE_VOLUMED_CONF ]]; then
cp $PREFIX/etc/mounted.conf $PREFIX/etc/gnb.conf
else
echo "ERROR: No configuration file provided."
echo "Please set USE_VOLUMED_CONF and mount a configuration file at $PREFIX/etc/mounted.conf"
exit 1
fi
echo "=================================="
echo "== Configuration file:"
cat $PREFIX/etc/enb.conf
# enable printing of stack traces on assert
export gdbStacks=1
echo "=================================="
echo "== Starting gNB soft modem with AW2S"
if [[ -v USE_ADDITIONAL_OPTIONS ]]; then
echo "Additional option(s): ${USE_ADDITIONAL_OPTIONS}"
new_args=()
while [[ $# -gt 0 ]]; do
new_args+=("$1")
shift
done
for word in ${USE_ADDITIONAL_OPTIONS}; do
new_args+=("$word")
done
echo "${new_args[@]}"
exec "${new_args[@]}"
else
echo "$@"
exec "$@"
fi
+2 -11
View File
@@ -53,11 +53,8 @@ int create_tasks(uint32_t enb_nb) {
LOG_I(ENB_APP, "Creating ENB_APP eNB Task\n"); LOG_I(ENB_APP, "Creating ENB_APP eNB Task\n");
rc = itti_create_task (TASK_ENB_APP, eNB_app_task, NULL); rc = itti_create_task (TASK_ENB_APP, eNB_app_task, NULL);
AssertFatal(rc >= 0, "Create task for eNB APP failed\n"); AssertFatal(rc >= 0, "Create task for eNB APP failed\n");
rrc_enb_init();
LOG_I(RRC,"Creating RRC eNB Task\n"); itti_mark_task_ready(TASK_RRC_ENB);
rc = itti_create_task (TASK_RRC_ENB, rrc_enb_task, NULL);
AssertFatal(rc >= 0, "Create task for RRC eNB failed\n");
if (get_softmodem_params()->emulate_l1 || (EPC_MODE_ENABLED && split73 != SPLIT73_DU)) { if (get_softmodem_params()->emulate_l1 || (EPC_MODE_ENABLED && split73 != SPLIT73_DU)) {
rc = itti_create_task(TASK_SCTP, sctp_eNB_task, NULL); rc = itti_create_task(TASK_SCTP, sctp_eNB_task, NULL);
AssertFatal(rc >= 0, "Create task for SCTP failed\n"); AssertFatal(rc >= 0, "Create task for SCTP failed\n");
@@ -89,11 +86,5 @@ int create_tasks(uint32_t enb_nb) {
AssertFatal(rc >= 0, "Create task for GTPV1U failed\n"); AssertFatal(rc >= 0, "Create task for GTPV1U failed\n");
} }
if (!NODE_IS_CU(type)) {
LOG_I(MAC,"Creating MAC eNB Task\n");
rc = itti_create_task(TASK_MAC_ENB, mac_enb_task, NULL);
AssertFatal(rc >= 0, "Create task for MAC eNB failed\n");
}
return 0; return 0;
} }
+39 -52
View File
@@ -313,7 +313,6 @@ static inline int rxtx(PHY_VARS_eNB *eNB,
return(0); return(0);
} }
static void *L1_thread_tx(void *param) { static void *L1_thread_tx(void *param) {
L1_proc_t *eNB_proc = (L1_proc_t *)param; L1_proc_t *eNB_proc = (L1_proc_t *)param;
L1_rxtx_proc_t *proc = &eNB_proc->L1_proc_tx; L1_rxtx_proc_t *proc = &eNB_proc->L1_proc_tx;
@@ -811,35 +810,19 @@ static void *eNB_thread_prach_br( void *param ) {
return &eNB_thread_prach_status; return &eNB_thread_prach_status;
} }
static void print_opp_meas(PHY_VARS_eNB *eNB);
extern void init_td_thread(PHY_VARS_eNB *); static void reset_opp_meas(PHY_VARS_eNB *eNB);
extern void init_te_thread(PHY_VARS_eNB *);
extern void kill_td_thread(PHY_VARS_eNB *);
extern void kill_te_thread(PHY_VARS_eNB *);
static void *process_stats_thread(void *param) { static void *process_stats_thread(void *param) {
PHY_VARS_eNB *eNB = (PHY_VARS_eNB *)param; PHY_VARS_eNB *eNB = (PHY_VARS_eNB *)param;
wait_sync("process_stats_thread"); wait_sync("process_stats_thread");
reset_opp_meas(eNB);
while (!oai_exit) { while (!oai_exit) {
sleep(1); sleep(1);
print_opp_meas(eNB);
if (opp_enabled == 1) { if (RC.mac)
if ( eNB->ulsch_decoding_stats.trials>0) lte_dump_mac_stats(RC.mac[0], stdout);
print_meas(&eNB->ulsch_decoding_stats,"ulsch_decoding",NULL,NULL); if (time(NULL) % 10)
reset_opp_meas(eNB);
if (eNB->dlsch_encoding_stats.trials >0) {
print_meas(&eNB->dlsch_turbo_encoding_preperation_stats,"dlsch_coding_crc",NULL,NULL);
print_meas(&eNB->dlsch_turbo_encoding_segmentation_stats,"dlsch_segmentation",NULL,NULL);
print_meas(&eNB->dlsch_encoding_stats,"dlsch_encoding",NULL,NULL);
print_meas(&eNB->dlsch_turbo_encoding_stats,"turbo_encoding",NULL,NULL);
print_meas(&eNB->dlsch_interleaving_stats,"turbo_interleaving",NULL,NULL);
print_meas(&eNB->dlsch_rate_matching_stats,"turbo_rate_matching",NULL,NULL);
}
print_meas(&eNB->dlsch_modulation_stats,"dlsch_modulation",NULL,NULL);
}
} }
return(NULL); return(NULL);
@@ -918,11 +901,6 @@ void init_eNB_proc(int inst) {
pthread_cond_init( &proc->cond_prach_br, NULL); pthread_cond_init( &proc->cond_prach_br, NULL);
pthread_attr_init( &proc->attr_prach_br); pthread_attr_init( &proc->attr_prach_br);
if(get_thread_worker_conf() == WORKER_ENABLE) {
init_te_thread(eNB);
init_td_thread(eNB);
}
LOG_I(PHY,"eNB->single_thread_flag:%d\n", eNB->single_thread_flag); LOG_I(PHY,"eNB->single_thread_flag:%d\n", eNB->single_thread_flag);
if ((get_thread_parallel_conf() == PARALLEL_RU_L1_SPLIT) && NFAPI_MODE!=NFAPI_MODE_VNF) { if ((get_thread_parallel_conf() == PARALLEL_RU_L1_SPLIT) && NFAPI_MODE!=NFAPI_MODE_VNF) {
@@ -954,8 +932,10 @@ void init_eNB_proc(int inst) {
AssertFatal(proc->instance_cnt_prach == -1,"instance_cnt_prach = %d\n",proc->instance_cnt_prach); AssertFatal(proc->instance_cnt_prach == -1,"instance_cnt_prach = %d\n",proc->instance_cnt_prach);
if (opp_enabled == 1) pthread_create(&proc->process_stats_thread,NULL,process_stats_thread,(void *)eNB); if (opp_enabled == 1)
pthread_create(&proc->L1_stats_thread,NULL,L1_stats_thread,(void*)eNB); threadCreate(&proc->process_stats_thread, process_stats_thread, (void *)eNB, "opp stats", -1, sched_get_priority_min(SCHED_OAI));
if (!IS_SOFTMODEM_NOSTATS_BIT)
threadCreate(&proc->L1_stats_thread, L1_stats_thread, (void *)eNB, "L1 stats", -1, sched_get_priority_min(SCHED_OAI));
} }
//for multiple CCs: setup master and slaves //for multiple CCs: setup master and slaves
@@ -997,11 +977,6 @@ void kill_eNB_proc(int inst) {
L1_proc = &proc->L1_proc; L1_proc = &proc->L1_proc;
L1_proc_tx = &proc->L1_proc_tx; L1_proc_tx = &proc->L1_proc_tx;
if(get_thread_worker_conf() == WORKER_ENABLE) {
kill_td_thread(eNB);
kill_te_thread(eNB);
}
LOG_I(PHY, "Killing TX CC_id %d inst %d\n", CC_id, inst ); LOG_I(PHY, "Killing TX CC_id %d inst %d\n", CC_id, inst );
if ((get_thread_parallel_conf() == PARALLEL_RU_L1_SPLIT || get_thread_parallel_conf() == PARALLEL_RU_L1_TRX_SPLIT) && NFAPI_MODE!=NFAPI_MODE_VNF) { if ((get_thread_parallel_conf() == PARALLEL_RU_L1_SPLIT || get_thread_parallel_conf() == PARALLEL_RU_L1_TRX_SPLIT) && NFAPI_MODE!=NFAPI_MODE_VNF) {
@@ -1060,30 +1035,43 @@ void kill_eNB_proc(int inst) {
} }
} }
static void reset_opp_meas(PHY_VARS_eNB *eNB)
void reset_opp_meas(void) { {
int sfn;
reset_meas(&softmodem_stats_mt); reset_meas(&softmodem_stats_mt);
reset_meas(&softmodem_stats_hw); reset_meas(&softmodem_stats_hw);
reset_meas(&softmodem_stats_rxtx_sf);
for (sfn=0; sfn < 10; sfn++) { reset_meas(&softmodem_stats_rx_sf);
reset_meas(&softmodem_stats_rxtx_sf); reset_meas(&eNB->ulsch_decoding_stats);
reset_meas(&softmodem_stats_rx_sf); reset_meas(&eNB->dlsch_turbo_encoding_preperation_stats);
} reset_meas(&eNB->dlsch_turbo_encoding_segmentation_stats);
reset_meas(&eNB->dlsch_encoding_stats);
reset_meas(&eNB->dlsch_turbo_encoding_stats);
reset_meas(&eNB->dlsch_interleaving_stats);
reset_meas(&eNB->dlsch_rate_matching_stats);
reset_meas(&eNB->dlsch_modulation_stats);
} }
static void print_opp_meas(PHY_VARS_eNB *eNB)
void print_opp_meas(void) { {
int sfn=0;
print_meas(&softmodem_stats_mt, "Main ENB Thread", NULL, NULL); print_meas(&softmodem_stats_mt, "Main ENB Thread", NULL, NULL);
print_meas(&softmodem_stats_hw, "HW Acquisation", NULL, NULL); print_meas(&softmodem_stats_hw, "HW Acquisation", NULL, NULL);
for (sfn=0; sfn < 10; sfn++) {
print_meas(&softmodem_stats_rxtx_sf,"[eNB][total_phy_proc_rxtx]",NULL, NULL); print_meas(&softmodem_stats_rxtx_sf,"[eNB][total_phy_proc_rxtx]",NULL, NULL);
print_meas(&softmodem_stats_rx_sf,"[eNB][total_phy_proc_rx]",NULL,NULL); print_meas(&softmodem_stats_rx_sf,"[eNB][total_phy_proc_rx]",NULL,NULL);
} if (eNB->ulsch_decoding_stats.trials > 0)
} print_meas(&eNB->ulsch_decoding_stats, "ulsch_decoding", NULL, NULL);
if (eNB->dlsch_encoding_stats.trials > 0) {
print_meas(&eNB->dlsch_turbo_encoding_preperation_stats, "dlsch_coding_crc", NULL, NULL);
print_meas(&eNB->dlsch_turbo_encoding_segmentation_stats, "dlsch_segmentation", NULL, NULL);
print_meas(&eNB->dlsch_encoding_stats, "dlsch_encoding", NULL, NULL);
print_meas(&eNB->dlsch_turbo_encoding_stats, "turbo_encoding", NULL, NULL);
print_meas(&eNB->dlsch_interleaving_stats, "turbo_interleaving", NULL, NULL);
print_meas(&eNB->dlsch_rate_matching_stats, "turbo_rate_matching", NULL, NULL);
}
print_meas(&eNB->dlsch_modulation_stats, "dlsch_modulation", NULL, NULL);
}
void free_transport(PHY_VARS_eNB *eNB) { void free_transport(PHY_VARS_eNB *eNB) {
for (int i=0; i<NUMBER_OF_DLSCH_MAX; i++) { for (int i=0; i<NUMBER_OF_DLSCH_MAX; i++) {
@@ -1279,7 +1267,6 @@ void init_eNB(int single_thread_flag,
eNB->prach_energy_counter = 0; eNB->prach_energy_counter = 0;
} }
} }
LOG_I(PHY,"[lte-softmodem.c] eNB structure allocated\n"); LOG_I(PHY,"[lte-softmodem.c] eNB structure allocated\n");
} }
+5 -14
View File
@@ -1472,11 +1472,11 @@ static void *ru_stats_thread(void *param) {
sleep(1); sleep(1);
if (opp_enabled) { if (opp_enabled) {
if (ru->feprx) print_meas(&ru->ofdm_demod_stats,"feprx",NULL,NULL); if (ru->feprx) print_meas(&ru->ofdm_demod_stats,"feprx_ru",NULL,NULL);
if (ru->feptx_ofdm) print_meas(&ru->ofdm_mod_stats,"feptx_ofdm",NULL,NULL); if (ru->feptx_ofdm) print_meas(&ru->ofdm_mod_stats,"feptx_ofdm_ru",NULL,NULL);
if (ru->fh_north_asynch_in) print_meas(&ru->rx_fhaul,"rx_fhaul",NULL,NULL); if (ru->fh_north_asynch_in) print_meas(&ru->rx_fhaul,"rx_fhaul_ru",NULL,NULL);
if (ru->fh_north_out) { if (ru->fh_north_out) {
print_meas(&ru->tx_fhaul,"tx_fhaul",NULL,NULL); print_meas(&ru->tx_fhaul,"tx_fhaul",NULL,NULL);
@@ -2335,17 +2335,8 @@ void init_RU_proc(RU_t *ru) {
init_feptx_thread(ru, NULL); init_feptx_thread(ru, NULL);
} }
if (opp_enabled == 1) pthread_create(&ru->ru_stats_thread,NULL,ru_stats_thread,(void *)ru); if (opp_enabled == 1)
/* pthread_create(&ru->ru_stats_thread, NULL, ru_stats_thread, (void *)ru);
if (ru->function == eNodeB_3GPP) {
usleep(10000);
LOG_I(PHY, "Signaling main thread that RU %d (is_slave %d,send_dmrs %d) is ready in state %s\n",ru->idx,ru->is_slave,ru->generate_dmrs_sync,ru_states[ru->state]);
AssertFatal((ret=pthread_mutex_lock(ru->ru_mutex))==0,"mutex_lock returns %d\n",ret);
*ru->ru_mask &= ~(1<<ru->idx);
pthread_cond_signal(ru->ru_cond);
AssertFatal((ret=pthread_mutex_unlock(ru->ru_mutex))==0,"mutex_unlock returns %d\n",ret);
}
*/
} }
+3 -9
View File
@@ -156,10 +156,6 @@ void sendFs6Ulharq(enum pckType type, int UEid, PHY_VARS_eNB *eNB, LTE_eNB_UCI *
RU_t **RCconfig_RU(int nb_RU,int nb_L1_inst,PHY_VARS_eNB ***eNB,uint64_t *ru_mask,pthread_mutex_t *ru_mutex,pthread_cond_t *ru_cond); RU_t **RCconfig_RU(int nb_RU,int nb_L1_inst,PHY_VARS_eNB ***eNB,uint64_t *ru_mask,pthread_mutex_t *ru_mutex,pthread_cond_t *ru_cond);
extern void reset_opp_meas(void);
extern void print_opp_meas(void);
RU_t **RCconfig_RU(int nb_RU,int nb_L1_inst,PHY_VARS_eNB ***eNB,uint64_t *ru_mask,pthread_mutex_t *ru_mutex,pthread_cond_t *ru_cond); RU_t **RCconfig_RU(int nb_RU,int nb_L1_inst,PHY_VARS_eNB ***eNB,uint64_t *ru_mask,pthread_mutex_t *ru_mutex,pthread_cond_t *ru_cond);
int transmission_mode=1; int transmission_mode=1;
@@ -452,10 +448,6 @@ int main ( int argc, char **argv )
set_taus_seed (0); set_taus_seed (0);
printf("configuring for RAU/RRU\n"); printf("configuring for RAU/RRU\n");
if (opp_enabled ==1) {
reset_opp_meas();
}
cpuf=get_cpu_freq_GHz(); cpuf=get_cpu_freq_GHz();
printf("ITTI init, useMME: %i\n",EPC_MODE_ENABLED); printf("ITTI init, useMME: %i\n",EPC_MODE_ENABLED);
itti_init(TASK_MAX, tasks_info); itti_init(TASK_MAX, tasks_info);
@@ -490,6 +482,7 @@ int main ( int argc, char **argv )
MessageDef *msg_p = itti_alloc_new_message (TASK_ENB_APP, 0, RRC_CONFIGURATION_REQ); MessageDef *msg_p = itti_alloc_new_message (TASK_ENB_APP, 0, RRC_CONFIGURATION_REQ);
RRC_CONFIGURATION_REQ(msg_p) = RC.rrc[enb_id]->configuration; RRC_CONFIGURATION_REQ(msg_p) = RC.rrc[enb_id]->configuration;
itti_send_msg_to_task (TASK_RRC_ENB, ENB_MODULE_ID_TO_INSTANCE(enb_id), msg_p); itti_send_msg_to_task (TASK_RRC_ENB, ENB_MODULE_ID_TO_INSTANCE(enb_id), msg_p);
rrc_enb_process_itti_msg(NULL);
} }
node_type = RC.rrc[0]->node_type; node_type = RC.rrc[0]->node_type;
} }
@@ -605,10 +598,11 @@ int main ( int argc, char **argv )
sync_var=0; sync_var=0;
pthread_cond_broadcast(&sync_cond); pthread_cond_broadcast(&sync_cond);
pthread_mutex_unlock(&sync_mutex); pthread_mutex_unlock(&sync_mutex);
config_check_unknown_cmdlineopt(CONFIG_CHECKALLSECTIONS);
} }
create_tasks_mbms(1); create_tasks_mbms(1);
sleep(1);
config_check_unknown_cmdlineopt(CONFIG_CHECKALLSECTIONS);
// wait for end of program // wait for end of program
LOG_UI(ENB_APP,"TYPE <CTRL-C> TO TERMINATE\n"); LOG_UI(ENB_APP,"TYPE <CTRL-C> TO TERMINATE\n");
-8
View File
@@ -179,14 +179,6 @@ extern void init_UE(int nb_inst,
extern void init_thread(int sched_runtime, int sched_deadline, int sched_fifo, cpu_set_t *cpuset, char *name); extern void init_thread(int sched_runtime, int sched_deadline, int sched_fifo, cpu_set_t *cpuset, char *name);
extern void reset_opp_meas(void);
extern void print_opp_meas(void);
extern void init_td_thread(PHY_VARS_eNB *);
extern void init_te_thread(PHY_VARS_eNB *);
extern void kill_td_thread(PHY_VARS_eNB *);
extern void kill_te_thread(PHY_VARS_eNB *);
extern void init_ocm(void); extern void init_ocm(void);
extern void init_ue_devices(PHY_VARS_UE *); extern void init_ue_devices(PHY_VARS_UE *);
+8 -169
View File
@@ -790,9 +790,7 @@ static void *UE_thread_rxn_txnp4(void *arg) {
#endif #endif
} }
#if UE_TIMING_TRACE start_UE_TIMING(UE->generic_stat);
start_meas(&UE->generic_stat);
#endif
if (UE->mac_enabled==1) { if (UE->mac_enabled==1) {
int ret = ue_scheduler(UE->Mod_id, int ret = ue_scheduler(UE->Mod_id,
@@ -810,9 +808,7 @@ static void *UE_thread_rxn_txnp4(void *arg) {
} }
} }
#if UE_TIMING_TRACE stop_UE_TIMING(UE->generic_stat);
stop_meas(&UE->generic_stat);
#endif
// Prepare the future Tx data // Prepare the future Tx data
@@ -1082,9 +1078,7 @@ static void *UE_phy_stub_standalone_pnf_task(void *arg) {
for (ue_index = 0; ue_index < ue_num; ue_index++) { for (ue_index = 0; ue_index < ue_num; ue_index++) {
ue_Mod_id = ue_thread_id + NB_THREAD_INST * ue_index; // Always 0 in standalone pnf mode ue_Mod_id = ue_thread_id + NB_THREAD_INST * ue_index; // Always 0 in standalone pnf mode
UE = PHY_vars_UE_g[ue_Mod_id][0]; UE = PHY_vars_UE_g[ue_Mod_id][0];
#if UE_TIMING_TRACE start_UE_TIMING(UE->generic_stat);
start_meas(&UE->generic_stat);
#endif
int rx_frame = NFAPI_SFNSF2SF(sfn_sf) < 4 ? (NFAPI_SFNSF2SFN(sfn_sf) + 1023) % 1024 : NFAPI_SFNSF2SFN(sfn_sf); // subtracting 4 from subframe_tx int rx_frame = NFAPI_SFNSF2SF(sfn_sf) < 4 ? (NFAPI_SFNSF2SFN(sfn_sf) + 1023) % 1024 : NFAPI_SFNSF2SFN(sfn_sf); // subtracting 4 from subframe_tx
int rx_subframe = NFAPI_SFNSF2SF(sfn_sf) < 4 ? NFAPI_SFNSF2SF(sfn_sf) + 6 : NFAPI_SFNSF2SF(sfn_sf) - 4; int rx_subframe = NFAPI_SFNSF2SF(sfn_sf) < 4 ? NFAPI_SFNSF2SF(sfn_sf) + 6 : NFAPI_SFNSF2SF(sfn_sf) - 4;
LOG_D(MAC, "rx_frame %d rx_subframe %d\n", rx_frame, rx_subframe); LOG_D(MAC, "rx_frame %d rx_subframe %d\n", rx_frame, rx_subframe);
@@ -1105,10 +1099,7 @@ static void *UE_phy_stub_standalone_pnf_task(void *arg) {
} }
} }
#if UE_TIMING_TRACE stop_UE_TIMING(UE->generic_stat);
stop_meas(&UE->generic_stat);
#endif
// Prepare the future Tx data // Prepare the future Tx data
if ((subframe_select(&UE->frame_parms, NFAPI_SFNSF2SF(sfn_sf)) == SF_UL) || if ((subframe_select(&UE->frame_parms, NFAPI_SFNSF2SF(sfn_sf)) == SF_UL) ||
(UE->frame_parms.frame_type == FDD)) { (UE->frame_parms.frame_type == FDD)) {
@@ -1499,9 +1490,7 @@ static void *UE_phy_stub_single_thread_rxn_txnp4(void *arg) {
phy_procedures_UE_SL_TX(UE,proc); phy_procedures_UE_SL_TX(UE,proc);
} }
#if UE_TIMING_TRACE start_UE_TIMING(UE->generic_stat);
start_meas(&UE->generic_stat);
#endif
if (UE->mac_enabled==1) { if (UE->mac_enabled==1) {
ret = ue_scheduler(ue_Mod_id, ret = ue_scheduler(ue_Mod_id,
@@ -1519,10 +1508,7 @@ static void *UE_phy_stub_single_thread_rxn_txnp4(void *arg) {
} }
} }
#if UE_TIMING_TRACE stop_UE_TIMING(UE->generic_stat);
stop_meas(&UE->generic_stat);
#endif
// Prepare the future Tx data // Prepare the future Tx data
if ((subframe_select( &UE->frame_parms, proc->subframe_tx) == SF_UL) || if ((subframe_select( &UE->frame_parms, proc->subframe_tx) == SF_UL) ||
@@ -1699,160 +1685,13 @@ static void *UE_phy_stub_single_thread_rxn_txnp4(void *arg) {
* \returns a pointer to an int. The storage is not on the heap and must not be freed. * \returns a pointer to an int. The storage is not on the heap and must not be freed.
*/ */
static void *UE_phy_stub_thread_rxn_txnp4(void *arg) { static void *UE_phy_stub_thread_rxn_txnp4(void *arg)
#if 0 {
thread_top_init("UE_phy_stub_thread_rxn_txnp4",1,870000L,1000000L,1000000L);
module_id_t Mod_id = 0;
static __thread int UE_thread_rxtx_retval;
struct rx_tx_thread_data *rtd = arg;
UE_rxtx_proc_t *proc = rtd->proc;
PHY_VARS_UE *UE = rtd->UE;
phy_stub_ticking->ticking_var = -1;
proc->subframe_rx=proc->sub_frame_start;
// CAREFUL HERE!
wait_sync("UE_phy_stub_thread_rxn_txnp4");
while (!oai_exit) {
if (pthread_mutex_lock(&phy_stub_ticking->mutex_ticking) != 0) {
LOG_E( MAC, "[SCHED][UE] error locking mutex for UE RXTX\n" );
exit_fun("nothing to add");
}
while (phy_stub_ticking->ticking_var < 0) {
// most of the time, the thread is waiting here
//pthread_cond_wait( &proc->cond_rxtx, &proc->mutex_rxtx )
LOG_D(MAC,"Waiting for ticking_var\n");
pthread_cond_wait( &phy_stub_ticking->cond_ticking, &phy_stub_ticking->mutex_ticking);
}
phy_stub_ticking->ticking_var--;
if (pthread_mutex_unlock(&phy_stub_ticking->mutex_ticking) != 0) {
LOG_E( MAC, "[SCHED][UE] error unlocking mutex for UE RXn_TXnp4\n" );
exit_fun("nothing to add");
}
proc->subframe_rx=timer_subframe;
proc->frame_rx = timer_frame;
proc->subframe_tx=(timer_subframe+4)%10;
proc->frame_tx = proc->frame_rx + (proc->subframe_rx>5?1:0);
// Process Rx data for one sub-frame
lte_subframe_t sf_type = subframe_select( &UE->frame_parms, proc->subframe_rx);
if ((sf_type == SF_DL) ||
(UE->frame_parms.frame_type == FDD) ||
(sf_type == SF_S)) {
if (UE->frame_parms.frame_type == TDD) {
LOG_D(PHY, "TDD%d,%s: calling UE_RX\n",
UE->frame_parms.tdd_config,
(sf_type==SF_DL? "SF_DL" :
(sf_type==SF_UL? "SF_UL" :
(sf_type==SF_S ? "SF_S" : "UNKNOWN_SF_TYPE"))));
} else {
LOG_D(PHY, "%s,%s: calling UE_RX\n",
(UE->frame_parms.frame_type==FDD? "FDD":
(UE->frame_parms.frame_type==TDD? "TDD":"UNKNOWN_DUPLEX_MODE")),
(sf_type==SF_DL? "SF_DL" :
(sf_type==SF_UL? "SF_UL" :
(sf_type==SF_S ? "SF_S" : "UNKNOWN_SF_TYPE"))));
}
phy_procedures_UE_SL_RX(UE,proc);
oai_subframe_ind(timer_frame, timer_subframe);
if(dl_config_req!= NULL) {
AssertFatal(0, "dl_config_req_UE_MAC() not handled\n");
//dl_config_req_UE_MAC(dl_config_req, Mod_id);
}
//if(UE_mac_inst[Mod_id].hi_dci0_req!= NULL){
if (hi_dci0_req!=NULL && hi_dci0_req->hi_dci0_request_body.hi_dci0_pdu_list!=NULL) {
AssertFatal(0, "hi_dci0_req_UE_MAC() not handled\n");
//hi_dci0_req_UE_MAC(hi_dci0_req, Mod_id);
//if(UE_mac_inst[Mod_id].hi_dci0_req->hi_dci0_request_body.hi_dci0_pdu_list!=NULL){
free(hi_dci0_req->hi_dci0_request_body.hi_dci0_pdu_list);
hi_dci0_req->hi_dci0_request_body.hi_dci0_pdu_list = NULL;
//}
free(hi_dci0_req);
hi_dci0_req = NULL;
} else if(hi_dci0_req!=NULL) {
free(hi_dci0_req);
hi_dci0_req = NULL;
}
if (NFAPI_MODE!=NFAPI_UE_STUB_PNF)
phy_procedures_UE_SL_TX(UE,proc);
}
#if UE_TIMING_TRACE
start_meas(&UE->generic_stat);
#endif
if (UE->mac_enabled==1) {
int ret = ue_scheduler(UE->Mod_id,
proc->frame_rx,
proc->subframe_rx,
proc->frame_tx,
proc->subframe_tx,
subframe_select(&UE->frame_parms,proc->subframe_tx),
0,
0);
if (ret != CONNECTION_OK)
LOG_E( PHY, "[UE %"PRIu8"] Frame %"PRIu32", subframe %u %s\n",
UE->Mod_id, proc->frame_rx, proc->subframe_tx,get_connectionloss_errstr(ret) );
}
#if UE_TIMING_TRACE
stop_meas(&UE->generic_stat);
#endif
// Prepare the future Tx data
if ((subframe_select( &UE->frame_parms, proc->subframe_tx) == SF_UL) ||
(UE->frame_parms.frame_type == FDD) )
if ((UE_mac_inst[Mod_id].UE_mode[0] == PRACH) ) {
// check if we have PRACH opportunity
if (is_prach_subframe(&UE->frame_parms,proc->frame_tx, proc->subframe_tx)) {
PRACH_RESOURCES_t *prach_resources = ue_get_rach(Mod_id, 0, proc->frame_tx, 0, proc->subframe_tx);
if(prach_resources!=NULL) {
fill_rach_indication_UE_MAC(Mod_id, proc->frame_tx,proc->subframe_tx, UL_INFO, prach_resources->ra_PreambleIndex, prach_resources->ra_RNTI);
Msg1_transmitted(Mod_id, 0, proc->frame_tx, 0);
UE_mac_inst[Mod_id].UE_mode[0] = RA_RESPONSE;
}
//ue_prach_procedures(ue,proc,eNB_id,abstraction_flag,mode);
}
} // mode is PRACH
// Substitute call to phy_procedures Tx with call to phy_stub functions in order to trigger
// UE Tx procedures directly at the MAC layer, based on the received ul_config requests from the vnf (eNB).
// Generate UL_indications which correspond to UL traffic.
if(ul_config_req!= NULL && ul_config_req->ul_config_request_body.ul_config_pdu_list != NULL) {
//LOG_I(MAC, "UE_phy_stub_thread_rxn_txnp4 ul_config_req is not NULL \n");
ul_config_req_UE_MAC(ul_config_req, timer_frame, timer_subframe, Mod_id);
if(ul_config_req->ul_config_request_body.ul_config_pdu_list != NULL) {
free(ul_config_req->ul_config_request_body.ul_config_pdu_list);
ul_config_req->ul_config_request_body.ul_config_pdu_list = NULL;
}
free(ul_config_req);
ul_config_req = NULL;
} else if(ul_config_req!=NULL) {
free(ul_config_req);
ul_config_req = NULL;
}
}
#endif // disabled
// thread finished // thread finished
free(arg); free(arg);
return NULL; //return &UE_thread_rxtx_retval; return NULL; //return &UE_thread_rxtx_retval;
} }
/*! /*!
* \brief This is the main UE thread. * \brief This is the main UE thread.
* This thread controls the other three UE threads: * This thread controls the other three UE threads:
@@ -1434,7 +1434,7 @@ int32_t nrLDPC_decod_offload(t_nrLDPC_dec_params* p_decParams, uint8_t harq_pid,
argv_re[1] = "-l"; argv_re[1] = "-l";
argv_re[2] = "31"; argv_re[2] = "31";
argv_re[3] = "-w"; argv_re[3] = "-w";
argv_re[4] = "81:00.0"; argv_re[4] = "b0:00.0";
argv_re[5] = "--file-prefix=b6"; argv_re[5] = "--file-prefix=b6";
argv_re[6] = "--"; argv_re[6] = "--";
+1 -1
View File
@@ -75,7 +75,7 @@ int load_nrLDPClib_offload(void) {
loader_shlibfunc_t shlib_decoffload_fdesc; loader_shlibfunc_t shlib_decoffload_fdesc;
shlib_decoffload_fdesc.fname = "nrLDPC_decod_offload"; shlib_decoffload_fdesc.fname = "nrLDPC_decod_offload";
int ret=load_module_shlib("ldpc_offload",&shlib_decoffload_fdesc,1,NULL); int ret=load_module_shlib("ldpc_t1",&shlib_decoffload_fdesc,1,NULL);
AssertFatal( (ret >= 0),"Error loading ldpc decoder offload"); AssertFatal( (ret >= 0),"Error loading ldpc decoder offload");
nrLDPC_decoder_offload = (nrLDPC_decoffloadfunc_t)shlib_decoffload_fdesc.fptr; nrLDPC_decoder_offload = (nrLDPC_decoffloadfunc_t)shlib_decoffload_fdesc.fptr;
@@ -241,10 +241,6 @@ void clean_eNb_dlsch(LTE_eNB_DLSCH_t *dlsch) {
} }
} }
void *te_thread(void *param) {
return(NULL);
}
static void TPencode(void * arg) { static void TPencode(void * arg) {
turboEncode_t * rdata=(turboEncode_t *) arg; turboEncode_t * rdata=(turboEncode_t *) arg;
unsigned char harq_pid = rdata->harq_pid; unsigned char harq_pid = rdata->harq_pid;
+16 -22
View File
@@ -248,6 +248,7 @@ void processULSegment(void * arg) {
if(ulsch_harq->repetition_number == 1) { if(ulsch_harq->repetition_number == 1) {
memset(ulsch_harq->pusch_rep_buffer[r],0,(sizeof(int32_t)*3*(6144+64))) ; // reset the buffer every new repetitions memset(ulsch_harq->pusch_rep_buffer[r],0,(sizeof(int32_t)*3*(6144+64))) ; // reset the buffer every new repetitions
} }
if(ulsch_harq->total_number_of_repetitions > 1) { if(ulsch_harq->total_number_of_repetitions > 1) {
if (ulsch_harq->rvidx==1) { if (ulsch_harq->rvidx==1) {
LOG_E(PHY,"Adding HARQ data for segment: %d\n", r); LOG_E(PHY,"Adding HARQ data for segment: %d\n", r);
@@ -267,28 +268,21 @@ void processULSegment(void * arg) {
soft_bits+96, soft_bits+96,
ulsch_harq->w[r]); ulsch_harq->w[r]);
stop_meas(&eNB->ulsch_deinterleaving_stats); stop_meas(&eNB->ulsch_deinterleaving_stats);
rdata->decodeIterations = rdata->function( soft_bits+96, rdata->decodeIterations = rdata->function(soft_bits + 96,
NULL, NULL,
rdata->decoded_bytes, rdata->decoded_bytes,
NULL, NULL,
rdata->Kr, rdata->Kr,
rdata->maxIterations, rdata->maxIterations,
rdata->nbSegments == 1 ? CRC24_A: CRC24_B, rdata->nbSegments == 1 ? CRC24_A : CRC24_B,
rdata->Fbits, rdata->Fbits,
&eNB->ulsch_tc_init_stats, &eNB->ulsch_tc_init_stats,
&eNB->ulsch_tc_alpha_stats, &eNB->ulsch_tc_alpha_stats,
&eNB->ulsch_tc_beta_stats, &eNB->ulsch_tc_beta_stats,
&eNB->ulsch_tc_gamma_stats, &eNB->ulsch_tc_gamma_stats,
&eNB->ulsch_tc_ext_stats, &eNB->ulsch_tc_ext_stats,
&eNB->ulsch_tc_intl1_stats, &eNB->ulsch_tc_intl1_stats,
&eNB->ulsch_tc_intl2_stats); &eNB->ulsch_tc_intl2_stats);
stop_meas(&eNB->ulsch_turbo_decoding_stats);
}
void *td_thread(void *param) {
return(NULL);
} }
int ulsch_decoding_data(PHY_VARS_eNB *eNB, L1_rxtx_proc_t *proc, int ulsch_decoding_data(PHY_VARS_eNB *eNB, L1_rxtx_proc_t *proc,
+36 -223
View File
@@ -148,21 +148,17 @@ LTE_UE_DLSCH_t *new_ue_dlsch(uint8_t Kmimo,uint8_t Mdlharq,uint32_t Nsoft,uint8_
return(NULL); return(NULL);
} }
uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue, uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
short *dlsch_llr, short *dlsch_llr,
LTE_DL_FRAME_PARMS *frame_parms, LTE_DL_FRAME_PARMS *frame_parms,
LTE_UE_DLSCH_t *dlsch, LTE_UE_DLSCH_t *dlsch,
LTE_DL_UE_HARQ_t *harq_process, LTE_DL_UE_HARQ_t *harq_process,
uint32_t frame, uint32_t frame,
uint8_t subframe, uint8_t subframe,
uint8_t harq_pid, uint8_t harq_pid,
uint8_t is_crnti, uint8_t is_crnti,
uint8_t llr8_flag) { uint8_t llr8_flag)
#if UE_TIMING_TRACE {
time_stats_t *dlsch_rate_unmatching_stats=&phy_vars_ue->dlsch_rate_unmatching_stats;
time_stats_t *dlsch_turbo_decoding_stats=&phy_vars_ue->dlsch_turbo_decoding_stats;
time_stats_t *dlsch_deinterleaving_stats=&phy_vars_ue->dlsch_deinterleaving_stats;
#endif
uint32_t A,E; uint32_t A,E;
uint32_t G; uint32_t G;
uint32_t ret,offset; uint32_t ret,offset;
@@ -174,27 +170,7 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
uint16_t i; uint16_t i;
#endif #endif
//#ifdef __WASAVX2__ //#ifdef __WASAVX2__
#if 0 decoder_if_t *td;
int Kr_last,skipped_last=0;
uint8_t (*tc_2cw)(int16_t *y,
int16_t *y2,
uint8_t *,
uint8_t *,
uint16_t,
uint16_t,
uint16_t,
uint8_t,
uint8_t,
uint8_t,
time_stats_t *,
time_stats_t *,
time_stats_t *,
time_stats_t *,
time_stats_t *,
time_stats_t *,
time_stats_t *);
#endif
decoder_if_t *tc;
if (!dlsch_llr) { if (!dlsch_llr) {
printf("dlsch_decoding.c: NULL dlsch_llr pointer\n"); printf("dlsch_decoding.c: NULL dlsch_llr pointer\n");
@@ -222,11 +198,11 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
} }
if (llr8_flag == 0) { if (llr8_flag == 0) {
tc = decoder16; td = decoder16;
} else { } else {
AssertFatal (harq_process->TBS >= 256 , "Mismatch flag nbRB=%d TBS=%d mcs=%d Qm=%d RIV=%d round=%d \n", AssertFatal (harq_process->TBS >= 256 , "Mismatch flag nbRB=%d TBS=%d mcs=%d Qm=%d RIV=%d round=%d \n",
harq_process->nb_rb, harq_process->TBS,harq_process->mcs,harq_process->Qm,harq_process->rvidx,harq_process->round); harq_process->nb_rb, harq_process->TBS,harq_process->mcs,harq_process->Qm,harq_process->rvidx,harq_process->round);
tc = decoder8; td = decoder8;
} }
// nb_rb = dlsch->nb_rb; // nb_rb = dlsch->nb_rb;
@@ -310,9 +286,7 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
Kr = harq_process->Kplus; Kr = harq_process->Kplus;
Kr_bytes = Kr>>3; Kr_bytes = Kr>>3;
#if UE_TIMING_TRACE start_UE_TIMING(phy_vars_ue->dlsch_rate_unmatching_stats);
start_meas(dlsch_rate_unmatching_stats);
#endif
memset(&dummy_w[r][0],0,3*(6144+64)*sizeof(short)); memset(&dummy_w[r][0],0,3*(6144+64)*sizeof(short));
harq_process->RTC[r] = generate_dummy_w(4+(Kr_bytes*8), harq_process->RTC[r] = generate_dummy_w(4+(Kr_bytes*8),
(uint8_t *) &dummy_w[r][0], (uint8_t *) &dummy_w[r][0],
@@ -347,15 +321,11 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
harq_process->Nl, harq_process->Nl,
r, r,
&E)==-1) { &E)==-1) {
#if UE_TIMING_TRACE stop_UE_TIMING(phy_vars_ue->dlsch_rate_unmatching_stats);
stop_meas(dlsch_rate_unmatching_stats);
#endif
LOG_E(PHY,"dlsch_decoding.c: Problem in rate_matching\n"); LOG_E(PHY,"dlsch_decoding.c: Problem in rate_matching\n");
return(dlsch->max_turbo_iterations); return(dlsch->max_turbo_iterations);
} else { } else {
#if UE_TIMING_TRACE stop_UE_TIMING(phy_vars_ue->dlsch_rate_unmatching_stats);
stop_meas(dlsch_rate_unmatching_stats);
#endif
} }
r_offset += E; r_offset += E;
@@ -364,15 +334,11 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
harq_process->d[r], harq_process->d[r],
harq_process->w); harq_process->w);
*/ */
#if UE_TIMING_TRACE start_UE_TIMING(phy_vars_ue->dlsch_deinterleaving_stats);
start_meas(dlsch_deinterleaving_stats);
#endif
sub_block_deinterleaving_turbo(4+Kr, sub_block_deinterleaving_turbo(4+Kr,
&harq_process->d[r][96], &harq_process->d[r][96],
harq_process->w[r]); harq_process->w[r]);
#if UE_TIMING_TRACE stop_UE_TIMING(phy_vars_ue->dlsch_deinterleaving_stats);
stop_meas(dlsch_deinterleaving_stats);
#endif
#ifdef DEBUG_DLSCH_DECODING #ifdef DEBUG_DLSCH_DECODING
/* /*
if (r==0) { if (r==0) {
@@ -394,184 +360,31 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
else else
crc_type = CRC24_B; crc_type = CRC24_B;
/*
printf("decoder input(segment %d)\n",r);
for (i=0;i<(3*8*Kr_bytes)+12;i++)
if ((harq_process->d[r][96+i]>7) ||
(harq_process->d[r][96+i] < -8))
printf("%d : %d\n",i,harq_process->d[r][96+i]);
printf("\n");
*/
//#ifndef __WASAVX2__
#if 1
if (err_flag == 0) { if (err_flag == 0) {
/*
LOG_I(PHY, "turbo algo Kr=%d cb_cnt=%d C=%d nbRB=%d crc_type %d TBSInput=%d TBSHarq=%d TBSplus24=%d mcs=%d Qm=%d RIV=%d round=%d maxIter %d\n",
Kr,r,harq_process->C,harq_process->nb_rb,crc_type,A,harq_process->TBS,
harq_process->B,harq_process->mcs,harq_process->Qm,harq_process->rvidx,harq_process->round,dlsch->max_turbo_iterations);
*/
if (llr8_flag) { if (llr8_flag) {
AssertFatal (Kr >= 256, "turbo algo issue Kr=%d cb_cnt=%d C=%d nbRB=%d TBSInput=%d TBSHarq=%d TBSplus24=%d mcs=%d Qm=%d RIV=%d round=%d\n", AssertFatal (Kr >= 256, "turbo algo issue Kr=%d cb_cnt=%d C=%d nbRB=%d TBSInput=%d TBSHarq=%d TBSplus24=%d mcs=%d Qm=%d RIV=%d round=%d\n",
Kr,r,harq_process->C,harq_process->nb_rb,A,harq_process->TBS,harq_process->B,harq_process->mcs,harq_process->Qm,harq_process->rvidx,harq_process->round); Kr,r,harq_process->C,harq_process->nb_rb,A,harq_process->TBS,harq_process->B,harq_process->mcs,harq_process->Qm,harq_process->rvidx,harq_process->round);
} }
#if UE_TIMING_TRACE
start_meas(dlsch_turbo_decoding_stats);
#endif
LOG_D(PHY,"AbsSubframe %d.%d Start turbo segment %d/%d \n",frame%1024,subframe,r,harq_process->C-1); LOG_D(PHY,"AbsSubframe %d.%d Start turbo segment %d/%d \n",frame%1024,subframe,r,harq_process->C-1);
ret = tc start_UE_TIMING(phy_vars_ue->dlsch_turbo_decoding_stats);
(&harq_process->d[r][96], ret = td(&harq_process->d[r][96],
NULL, NULL,
harq_process->c[r], harq_process->c[r],
NULL, NULL,
Kr, Kr,
dlsch->max_turbo_iterations, dlsch->max_turbo_iterations,
crc_type, crc_type,
(r==0) ? harq_process->F : 0, (r == 0) ? harq_process->F : 0,
&phy_vars_ue->dlsch_tc_init_stats, &phy_vars_ue->dlsch_tc_init_stats,
&phy_vars_ue->dlsch_tc_alpha_stats, &phy_vars_ue->dlsch_tc_alpha_stats,
&phy_vars_ue->dlsch_tc_beta_stats, &phy_vars_ue->dlsch_tc_beta_stats,
&phy_vars_ue->dlsch_tc_gamma_stats, &phy_vars_ue->dlsch_tc_gamma_stats,
&phy_vars_ue->dlsch_tc_ext_stats, &phy_vars_ue->dlsch_tc_ext_stats,
&phy_vars_ue->dlsch_tc_intl1_stats, &phy_vars_ue->dlsch_tc_intl1_stats,
&phy_vars_ue->dlsch_tc_intl2_stats); //(is_crnti==0)?harq_pid:harq_pid+1); &phy_vars_ue->dlsch_tc_intl2_stats); //(is_crnti==0)?harq_pid:harq_pid+1);
#if UE_TIMING_TRACE stop_UE_TIMING(phy_vars_ue->dlsch_turbo_decoding_stats);
stop_meas(dlsch_turbo_decoding_stats);
#endif
} }
#else
if ((harq_process->C == 1) ||
((r==harq_process->C-1) && (skipped_last==0))) { // last segment with odd number of segments
#if UE_TIMING_TRACE
start_meas(dlsch_turbo_decoding_stats);
#endif
ret = tc
(&harq_process->d[r][96],
harq_process->c[r],
Kr,
dlsch->max_turbo_iterations,
crc_type,
(r==0) ? harq_process->F : 0,
&phy_vars_ue->dlsch_tc_init_stats,
&phy_vars_ue->dlsch_tc_alpha_stats,
&phy_vars_ue->dlsch_tc_beta_stats,
&phy_vars_ue->dlsch_tc_gamma_stats,
&phy_vars_ue->dlsch_tc_ext_stats,
&phy_vars_ue->dlsch_tc_intl1_stats,
&phy_vars_ue->dlsch_tc_intl2_stats); //(is_crnti==0)?harq_pid:harq_pid+1);
#if UE_TIMING_TRACE
stop_meas(dlsch_turbo_decoding_stats);
#endif
// printf("single decode, exit\n");
// exit(-1);
} else {
// we can merge code segments
if ((skipped_last == 0) && (r<harq_process->C-1)) {
skipped_last = 1;
Kr_last = Kr;
} else {
skipped_last=0;
if (Kr_last == Kr) { // decode 2 code segments with AVX2 version
#ifdef DEBUG_DLSCH_DECODING
printf("single decoding segment %d (%p)\n",r-1,&harq_process->d[r-1][96]);
#endif
#if UE_TIMING_TRACE
start_meas(dlsch_turbo_decoding_stats);
#endif
#ifdef DEBUG_DLSCH_DECODING
printf("double decoding segments %d,%d (%p,%p)\n",r-1,r,&harq_process->d[r-1][96],&harq_process->d[r][96]);
#endif
ret = tc_2cw
(&harq_process->d[r-1][96],
&harq_process->d[r][96],
harq_process->c[r-1],
harq_process->c[r],
Kr,
dlsch->max_turbo_iterations,
crc_type,
(r==0) ? harq_process->F : 0,
&phy_vars_ue->dlsch_tc_init_stats,
&phy_vars_ue->dlsch_tc_alpha_stats,
&phy_vars_ue->dlsch_tc_beta_stats,
&phy_vars_ue->dlsch_tc_gamma_stats,
&phy_vars_ue->dlsch_tc_ext_stats,
&phy_vars_ue->dlsch_tc_intl1_stats,
&phy_vars_ue->dlsch_tc_intl2_stats); //(is_crnti==0)?harq_pid:harq_pid+1);
/*
ret = tc
(&harq_process->d[r-1][96],
harq_process->c[r-1],
Kr_last,
dlsch->max_turbo_iterations,
crc_type,
(r==0) ? harq_process->F : 0,
&phy_vars_ue->dlsch_tc_init_stats,
&phy_vars_ue->dlsch_tc_alpha_stats,
&phy_vars_ue->dlsch_tc_beta_stats,
&phy_vars_ue->dlsch_tc_gamma_stats,
&phy_vars_ue->dlsch_tc_ext_stats,
&phy_vars_ue->dlsch_tc_intl1_stats,
&phy_vars_ue->dlsch_tc_intl2_stats); //(is_crnti==0)?harq_pid:harq_pid+1);
exit(-1);*/
#if UE_TIMING_TRACE
stop_meas(dlsch_turbo_decoding_stats);
#endif
} else { // Kr_last != Kr
#if UE_TIMING_TRACE
start_meas(dlsch_turbo_decoding_stats);
#endif
ret = tc
(&harq_process->d[r-1][96],
harq_process->c[r-1],
Kr_last,
dlsch->max_turbo_iterations,
crc_type,
(r==0) ? harq_process->F : 0,
&phy_vars_ue->dlsch_tc_init_stats,
&phy_vars_ue->dlsch_tc_alpha_stats,
&phy_vars_ue->dlsch_tc_beta_stats,
&phy_vars_ue->dlsch_tc_gamma_stats,
&phy_vars_ue->dlsch_tc_ext_stats,
&phy_vars_ue->dlsch_tc_intl1_stats,
&phy_vars_ue->dlsch_tc_intl2_stats); //(is_crnti==0)?harq_pid:harq_pid+1);
#if UE_TIMING_TRACE
stop_meas(dlsch_turbo_decoding_stats);
start_meas(dlsch_turbo_decoding_stats);
#endif
ret = tc
(&harq_process->d[r][96],
harq_process->c[r],
Kr,
dlsch->max_turbo_iterations,
crc_type,
(r==0) ? harq_process->F : 0,
&phy_vars_ue->dlsch_tc_init_stats,
&phy_vars_ue->dlsch_tc_alpha_stats,
&phy_vars_ue->dlsch_tc_beta_stats,
&phy_vars_ue->dlsch_tc_gamma_stats,
&phy_vars_ue->dlsch_tc_ext_stats,
&phy_vars_ue->dlsch_tc_intl1_stats,
&phy_vars_ue->dlsch_tc_intl2_stats); //(is_crnti==0)?harq_pid:harq_pid+1);
#if UE_TIMING_TRACE
stop_meas(dlsch_turbo_decoding_stats);
/*printf("Segmentation: C %d r %d, dlsch_rate_unmatching_stats %5.3f dlsch_deinterleaving_stats %5.3f dlsch_turbo_decoding_stats %5.3f \n",
harq_process->C,
r,
dlsch_rate_unmatching_stats->p_time/(cpuf*1000.0),
dlsch_deinterleaving_stats->p_time/(cpuf*1000.0),
dlsch_turbo_decoding_stats->p_time/(cpuf*1000.0));*/
#endif
}
}
}
#endif
if ((err_flag == 0) && (ret>=(1+dlsch->max_turbo_iterations))) {// a Code segment is in error so break; if ((err_flag == 0) && (ret>=(1+dlsch->max_turbo_iterations))) {// a Code segment is in error so break;
LOG_D(PHY,"AbsSubframe %d.%d CRC failed, segment %d/%d \n",frame%1024,subframe,r,harq_process->C-1); LOG_D(PHY,"AbsSubframe %d.%d CRC failed, segment %d/%d \n",frame%1024,subframe,r,harq_process->C-1);
err_flag = 1; err_flag = 1;
@@ -370,8 +370,15 @@ int rx_pdsch(PHY_VARS_UE *ue,
#if UE_TIMING_TRACE #if UE_TIMING_TRACE
stop_meas(&ue->generic_stat_bis[ue->current_thread_id[subframe]][slot]); stop_meas(&ue->generic_stat_bis[ue->current_thread_id[subframe]][slot]);
LOG_D(PHY, "[AbsSFN %d.%d] Slot%d Symbol %d Flag %d type %d: Pilot/Data extraction %5.2f \n",frame,subframe,slot,symbol, LOG_D(PHY,
ue->high_speed_flag,type,ue->generic_stat_bis[ue->current_thread_id[subframe]][slot].p_time/(cpuf*1000.0)); "[AbsSFN %d.%d] Slot%d Symbol %d Flag %d type %d: Pilot/Data extraction %5.2f \n",
frame,
subframe,
slot,
symbol,
ue->high_speed_flag,
type,
ue->generic_stat_bis[ue->current_thread_id[subframe]][slot].p_time / (get_cpu_freq_GHz() * 1000.0));
#endif #endif
#if UE_TIMING_TRACE #if UE_TIMING_TRACE
start_meas(&ue->generic_stat_bis[ue->current_thread_id[subframe]][slot]); start_meas(&ue->generic_stat_bis[ue->current_thread_id[subframe]][slot]);
@@ -398,7 +405,13 @@ int rx_pdsch(PHY_VARS_UE *ue,
#if UE_TIMING_TRACE #if UE_TIMING_TRACE
stop_meas(&ue->generic_stat_bis[ue->current_thread_id[subframe]][slot]); stop_meas(&ue->generic_stat_bis[ue->current_thread_id[subframe]][slot]);
LOG_D(PHY, "[AbsSFN %d.%d] Slot%d Symbol %d: Channel Scale %5.2f \n",frame,subframe,slot,symbol,ue->generic_stat_bis[ue->current_thread_id[subframe]][slot].p_time/(cpuf*1000.0)); LOG_D(PHY,
"[AbsSFN %d.%d] Slot%d Symbol %d: Channel Scale %5.2f \n",
frame,
subframe,
slot,
symbol,
ue->generic_stat_bis[ue->current_thread_id[subframe]][slot].p_time / (get_cpu_freq_GHz() * 1000.0));
start_meas(&ue->generic_stat_bis[ue->current_thread_id[subframe]][slot]); start_meas(&ue->generic_stat_bis[ue->current_thread_id[subframe]][slot]);
#endif #endif
@@ -507,8 +520,14 @@ int rx_pdsch(PHY_VARS_UE *ue,
#endif #endif
#if UE_TIMING_TRACE #if UE_TIMING_TRACE
stop_meas(&ue->generic_stat_bis[ue->current_thread_id[subframe]][slot]); stop_meas(&ue->generic_stat_bis[ue->current_thread_id[subframe]][slot]);
LOG_D(PHY, "[AbsSFN %d.%d] Slot%d Symbol %d first_symbol_flag %d: Channel Level %5.2f \n",frame,subframe,slot,symbol,first_symbol_flag, LOG_D(PHY,
ue->generic_stat_bis[ue->current_thread_id[subframe]][slot].p_time/(cpuf*1000.0)); "[AbsSFN %d.%d] Slot%d Symbol %d first_symbol_flag %d: Channel Level %5.2f \n",
frame,
subframe,
slot,
symbol,
first_symbol_flag,
ue->generic_stat_bis[ue->current_thread_id[subframe]][slot].p_time / (get_cpu_freq_GHz() * 1000.0));
start_meas(&ue->generic_stat_bis[ue->current_thread_id[subframe]][slot]); start_meas(&ue->generic_stat_bis[ue->current_thread_id[subframe]][slot]);
#endif #endif
@@ -731,8 +750,14 @@ int rx_pdsch(PHY_VARS_UE *ue,
#if UE_TIMING_TRACE #if UE_TIMING_TRACE
stop_meas(&ue->generic_stat_bis[ue->current_thread_id[subframe]][slot]); stop_meas(&ue->generic_stat_bis[ue->current_thread_id[subframe]][slot]);
LOG_D(PHY, "[AbsSFN %d.%d] Slot%d Symbol %d log2_maxh %d Channel Comp %5.2f \n",frame,subframe,slot,symbol,pdsch_vars[eNB_id]->log2_maxh, LOG_D(PHY,
ue->generic_stat_bis[ue->current_thread_id[subframe]][slot].p_time/(cpuf*1000.0)); "[AbsSFN %d.%d] Slot%d Symbol %d log2_maxh %d Channel Comp %5.2f \n",
frame,
subframe,
slot,
symbol,
pdsch_vars[eNB_id]->log2_maxh,
ue->generic_stat_bis[ue->current_thread_id[subframe]][slot].p_time / (get_cpu_freq_GHz() * 1000.0));
start_meas(&ue->generic_stat_bis[ue->current_thread_id[subframe]][slot]); start_meas(&ue->generic_stat_bis[ue->current_thread_id[subframe]][slot]);
#endif #endif
@@ -805,7 +830,13 @@ int rx_pdsch(PHY_VARS_UE *ue,
#if UE_TIMING_TRACE #if UE_TIMING_TRACE
stop_meas(&ue->generic_stat_bis[ue->current_thread_id[subframe]][slot]); stop_meas(&ue->generic_stat_bis[ue->current_thread_id[subframe]][slot]);
LOG_D(PHY, "[AbsSFN %d.%d] Slot%d Symbol %d: Channel Combine %5.2f \n",frame,subframe,slot,symbol,ue->generic_stat_bis[ue->current_thread_id[subframe]][slot].p_time/(cpuf*1000.0)); LOG_D(PHY,
"[AbsSFN %d.%d] Slot%d Symbol %d: Channel Combine %5.2f \n",
frame,
subframe,
slot,
symbol,
ue->generic_stat_bis[ue->current_thread_id[subframe]][slot].p_time / (get_cpu_freq_GHz() * 1000.0));
start_meas(&ue->generic_stat_bis[ue->current_thread_id[subframe]][slot]); start_meas(&ue->generic_stat_bis[ue->current_thread_id[subframe]][slot]);
#endif #endif
//printf("LLR dlsch0_harq->Qm %d rx_type %d cw0 %d cw1 %d symbol %d \n",dlsch0_harq->Qm,rx_type,codeword_TB0,codeword_TB1,symbol); //printf("LLR dlsch0_harq->Qm %d rx_type %d cw0 %d cw1 %d symbol %d \n",dlsch0_harq->Qm,rx_type,codeword_TB0,codeword_TB1,symbol);
@@ -1168,7 +1199,13 @@ int rx_pdsch(PHY_VARS_UE *ue,
#if UE_TIMING_TRACE #if UE_TIMING_TRACE
stop_meas(&ue->generic_stat_bis[ue->current_thread_id[subframe]][slot]); stop_meas(&ue->generic_stat_bis[ue->current_thread_id[subframe]][slot]);
LOG_D(PHY, "[AbsSFN %d.%d] Slot%d Symbol %d: LLR Computation %5.2f \n",frame,subframe,slot,symbol,ue->generic_stat_bis[ue->current_thread_id[subframe]][slot].p_time/(cpuf*1000.0)); LOG_D(PHY,
"[AbsSFN %d.%d] Slot%d Symbol %d: LLR Computation %5.2f \n",
frame,
subframe,
slot,
symbol,
ue->generic_stat_bis[ue->current_thread_id[subframe]][slot].p_time / (get_cpu_freq_GHz() * 1000.0));
#endif #endif
// Please keep it: useful for debugging // Please keep it: useful for debugging
#if 0 #if 0
+8 -24
View File
@@ -121,14 +121,10 @@ int slot_fep(PHY_VARS_UE *ue,
dft(dftsizeidx,(int16_t *)tmp_dft_in, dft(dftsizeidx,(int16_t *)tmp_dft_in,
(int16_t *)&common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[Ns>>1]].rxdataF[aa][frame_parms->ofdm_symbol_size*symbol],1); (int16_t *)&common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[Ns>>1]].rxdataF[aa][frame_parms->ofdm_symbol_size*symbol],1);
} else { // use dft input from RX buffer directly } else { // use dft input from RX buffer directly
#if UE_TIMING_TRACE start_UE_TIMING(ue->rx_dft_stats);
start_meas(&ue->rx_dft_stats);
#endif
dft(dftsizeidx,(int16_t *)&common_vars->rxdata[aa][(rx_offset) % frame_length_samples], dft(dftsizeidx,(int16_t *)&common_vars->rxdata[aa][(rx_offset) % frame_length_samples],
(int16_t *)&common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[Ns>>1]].rxdataF[aa][frame_parms->ofdm_symbol_size*symbol],1); (int16_t *)&common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[Ns>>1]].rxdataF[aa][frame_parms->ofdm_symbol_size*symbol],1);
#if UE_TIMING_TRACE stop_UE_TIMING(ue->rx_dft_stats);
stop_meas(&ue->rx_dft_stats);
#endif
} }
} else { } else {
rx_offset += (frame_parms->ofdm_symbol_size+nb_prefix_samples)*l;// + rx_offset += (frame_parms->ofdm_symbol_size+nb_prefix_samples)*l;// +
@@ -145,9 +141,7 @@ int slot_fep(PHY_VARS_UE *ue,
(void *)&common_vars->rxdata[aa][0], (void *)&common_vars->rxdata[aa][0],
frame_parms->ofdm_symbol_size*sizeof(int)); frame_parms->ofdm_symbol_size*sizeof(int));
#if UE_TIMING_TRACE start_UE_TIMING(ue->rx_dft_stats);
start_meas(&ue->rx_dft_stats);
#endif
if ((rx_offset&7)!=0) { // if input to dft is not 128-bit aligned, issue for size 6 and 15 PRBs if ((rx_offset&7)!=0) { // if input to dft is not 128-bit aligned, issue for size 6 and 15 PRBs
memcpy((void *)tmp_dft_in, memcpy((void *)tmp_dft_in,
@@ -160,9 +154,7 @@ int slot_fep(PHY_VARS_UE *ue,
(int16_t *)&common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[Ns>>1]].rxdataF[aa][frame_parms->ofdm_symbol_size*symbol],1); (int16_t *)&common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[Ns>>1]].rxdataF[aa][frame_parms->ofdm_symbol_size*symbol],1);
} }
#if UE_TIMING_TRACE stop_UE_TIMING(ue->rx_dft_stats);
stop_meas(&ue->rx_dft_stats);
#endif
} }
@@ -178,17 +170,13 @@ int slot_fep(PHY_VARS_UE *ue,
#ifdef DEBUG_FEP #ifdef DEBUG_FEP
printf("Channel estimation eNB %d, aatx %d, slot %d, symbol %d\n",eNB_id,aa,Ns,l); printf("Channel estimation eNB %d, aatx %d, slot %d, symbol %d\n",eNB_id,aa,Ns,l);
#endif #endif
#if UE_TIMING_TRACE start_UE_TIMING(ue->dlsch_channel_estimation_stats);
start_meas(&ue->dlsch_channel_estimation_stats);
#endif
lte_dl_channel_estimation(ue,eNB_id,0, lte_dl_channel_estimation(ue,eNB_id,0,
Ns, Ns,
aa, aa,
l, l,
symbol); symbol);
#if UE_TIMING_TRACE stop_UE_TIMING(ue->dlsch_channel_estimation_stats);
stop_meas(&ue->dlsch_channel_estimation_stats);
#endif
for (i=0; i<ue->measurements.n_adj_cells; i++) { for (i=0; i<ue->measurements.n_adj_cells; i++) {
lte_dl_channel_estimation(ue,eNB_id,i+1, lte_dl_channel_estimation(ue,eNB_id,i+1,
@@ -206,17 +194,13 @@ int slot_fep(PHY_VARS_UE *ue,
#endif #endif
if (l==(4-frame_parms->Ncp)) { if (l==(4-frame_parms->Ncp)) {
#if UE_TIMING_TRACE start_UE_TIMING(ue->dlsch_freq_offset_estimation_stats);
start_meas(&ue->dlsch_freq_offset_estimation_stats);
#endif
lte_est_freq_offset(common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[Ns>>1]].dl_ch_estimates[0], lte_est_freq_offset(common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[Ns>>1]].dl_ch_estimates[0],
frame_parms, frame_parms,
l, l,
&common_vars->freq_offset, &common_vars->freq_offset,
reset_freq_est); reset_freq_est);
#if UE_TIMING_TRACE stop_UE_TIMING(ue->dlsch_freq_offset_estimation_stats);
stop_meas(&ue->dlsch_freq_offset_estimation_stats);
#endif
} }
} }
} }
+6 -18
View File
@@ -107,17 +107,13 @@ int slot_fep_mbsfn(PHY_VARS_UE *ue,
memset(&common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].rxdataF[aa][frame_parms->ofdm_symbol_size*l],0,frame_parms->ofdm_symbol_size*sizeof(int)); memset(&common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].rxdataF[aa][frame_parms->ofdm_symbol_size*l],0,frame_parms->ofdm_symbol_size*sizeof(int));
if (l==0) { if (l==0) {
#if UE_TIMING_TRACE start_UE_TIMING(ue->rx_dft_stats);
start_meas(&ue->rx_dft_stats);
#endif
dft(dftsizeidx,(int16_t *)&common_vars->rxdata[aa][(sample_offset + dft(dftsizeidx,(int16_t *)&common_vars->rxdata[aa][(sample_offset +
nb_prefix_samples0 + nb_prefix_samples0 +
subframe_offset - subframe_offset -
SOFFSET) % frame_length_samples], SOFFSET) % frame_length_samples],
(int16_t *)&common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].rxdataF[aa][frame_parms->ofdm_symbol_size*l],1); (int16_t *)&common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].rxdataF[aa][frame_parms->ofdm_symbol_size*l],1);
#if UE_TIMING_TRACE stop_UE_TIMING(ue->rx_dft_stats);
stop_meas(&ue->rx_dft_stats);
#endif
} else { } else {
if ((sample_offset + if ((sample_offset +
(frame_parms->ofdm_symbol_size+nb_prefix_samples0+nb_prefix_samples) + (frame_parms->ofdm_symbol_size+nb_prefix_samples0+nb_prefix_samples) +
@@ -128,18 +124,14 @@ int slot_fep_mbsfn(PHY_VARS_UE *ue,
(short *)&common_vars->rxdata[aa][0], (short *)&common_vars->rxdata[aa][0],
frame_parms->ofdm_symbol_size*sizeof(int)); frame_parms->ofdm_symbol_size*sizeof(int));
#if UE_TIMING_TRACE start_UE_TIMING(ue->rx_dft_stats);
start_meas(&ue->rx_dft_stats);
#endif
dft(dftsizeidx,(int16_t *)&common_vars->rxdata[aa][(sample_offset + dft(dftsizeidx,(int16_t *)&common_vars->rxdata[aa][(sample_offset +
(frame_parms->ofdm_symbol_size+nb_prefix_samples0+nb_prefix_samples) + (frame_parms->ofdm_symbol_size+nb_prefix_samples0+nb_prefix_samples) +
(frame_parms->ofdm_symbol_size+nb_prefix_samples)*(l-1) + (frame_parms->ofdm_symbol_size+nb_prefix_samples)*(l-1) +
subframe_offset- subframe_offset-
SOFFSET) % frame_length_samples], SOFFSET) % frame_length_samples],
(int16_t *)&common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].rxdataF[aa][frame_parms->ofdm_symbol_size*l],1); (int16_t *)&common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].rxdataF[aa][frame_parms->ofdm_symbol_size*l],1);
#if UE_TIMING_TRACE stop_UE_TIMING(ue->rx_dft_stats);
stop_meas(&ue->rx_dft_stats);
#endif
} }
} }
@@ -262,17 +254,13 @@ int slot_fep_mbsfn_khz_1dot25(PHY_VARS_UE *ue,
for (aa=0; aa<frame_parms->nb_antennas_rx; aa++) { for (aa=0; aa<frame_parms->nb_antennas_rx; aa++) {
memset(&common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].rxdataF[aa][0],0,ofdm_symbol_size*sizeof(int)); memset(&common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].rxdataF[aa][0],0,ofdm_symbol_size*sizeof(int));
#if UE_TIMING_TRACE start_UE_TIMING(ue->rx_dft_stats);
start_meas(&ue->rx_dft_stats);
#endif
dft(dftsizeidx,(int16_t *)&common_vars->rxdata[aa][(sample_offset + dft(dftsizeidx,(int16_t *)&common_vars->rxdata[aa][(sample_offset +
nb_prefix_samples + nb_prefix_samples +
subframe_offset - subframe_offset -
SOFFSET) % frame_length_samples], SOFFSET) % frame_length_samples],
(int16_t *)&common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].rxdataF[aa][0],1); (int16_t *)&common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[subframe]].rxdataF[aa][0],1);
#if UE_TIMING_TRACE stop_UE_TIMING(ue->rx_dft_stats);
stop_meas(&ue->rx_dft_stats);
#endif
} }
for (aa=0; aa<frame_parms->nb_antennas_tx; aa++) { for (aa=0; aa<frame_parms->nb_antennas_tx; aa++) {
@@ -106,10 +106,10 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
unsigned char symbol, unsigned char symbol,
int ul_id, int ul_id,
unsigned short bwp_start_subcarrier, unsigned short bwp_start_subcarrier,
nfapi_nr_pusch_pdu_t *pusch_pdu) { nfapi_nr_pusch_pdu_t *pusch_pdu,
c16_t pilot[3280] __attribute__((aligned(16))); int *max_ch) {
int16_t *fdcl, *fdcr, *fdclh, *fdcrh;
c16_t pilot[3280] __attribute__((aligned(16)));
const int chest_freq = gNB->chest_freq; const int chest_freq = gNB->chest_freq;
#ifdef DEBUG_CH #ifdef DEBUG_CH
@@ -137,31 +137,6 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
k0, k0,
symbol); symbol);
switch (nushift) {
case 0:
fdcl = filt8_dcl0;
fdcr = filt8_dcr0;
fdclh = filt8_dcl0_h;
fdcrh = filt8_dcr0_h;
break;
case 1:
fdcl = filt8_dcl1;
fdcr = filt8_dcr1;
fdclh = filt8_dcl1_h;
fdcrh = filt8_dcr1_h;
break;
default:
#ifdef DEBUG_CH
if (debug_ch_est)
fclose(debug_ch_est);
#endif
return(-1);
break;
}
//------------------generate DMRS------------------// //------------------generate DMRS------------------//
if(pusch_pdu->ul_dmrs_scrambling_id != gNB->pusch_gold_init[pusch_pdu->scid]) { if(pusch_pdu->ul_dmrs_scrambling_id != gNB->pusch_gold_init[pusch_pdu->scid]) {
@@ -232,6 +207,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
} }
c16_t ch16= {.r=(int16_t)ch.r, .i=(int16_t)ch.i}; c16_t ch16= {.r=(int16_t)ch.r, .i=(int16_t)ch.i};
*max_ch = max(*max_ch, max(abs(ch.r), abs(ch.i)));
// Channel interpolation // Channel interpolation
for (int k_line = 0; k_line <= 1; k_line++) { for (int k_line = 0; k_line <= 1; k_line++) {
@@ -259,39 +235,6 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
} }
} }
// check if PRB crosses DC and improve estimates around DC
if ((bwp_start_subcarrier < symbolSize) && (bwp_start_subcarrier+nb_rb_pusch*12 >= symbolSize)) {
ul_ch = &ul_ch_estimates[p*gNB->frame_parms.nb_antennas_rx+aarx][ch_offset];
const uint16_t idxDC = symbolSize - bwp_start_subcarrier;
re_offset = k0;
pil = pilot + idxDC / 2 - 1;
ul_ch += idxDC - 2 ;
ul_ch = memset(ul_ch, 0, sizeof(*ul_ch)*5);
re_offset = (re_offset + idxDC - 2) % symbolSize;
const c16_t ch=c16mulShift(*pil,
rxdataF[soffset+nushift+re_offset],
15);
// for proper alignment of SIMD vectors
if((gNB->frame_parms.N_RB_UL&1)==0) {
c16multaddVectRealComplex(fdcl, &ch, ul_ch-2, 8);
pil += 2;
re_offset = (re_offset+4) % symbolSize;
const c16_t ch_tmp=c16mulShift(*pil,
rxdataF[nushift+re_offset],
15);
c16multaddVectRealComplex(fdcr, &ch_tmp, ul_ch-2, 8);
} else {
c16multaddVectRealComplex(fdclh, &ch, ul_ch, 8);
pil += 2;
re_offset = (re_offset+4) % symbolSize;
const c16_t ch_tmp=c16mulShift(*pil,
rxdataF[soffset+nushift+re_offset],
15);
c16multaddVectRealComplex(fdcrh, &ch_tmp, ul_ch, 8);
}
}
#ifdef DEBUG_PUSCH #ifdef DEBUG_PUSCH
ul_ch = &ul_ch_estimates[p*gNB->frame_parms.nb_antennas_rx+aarx][ch_offset]; ul_ch = &ul_ch_estimates[p*gNB->frame_parms.nb_antennas_rx+aarx][ch_offset];
@@ -304,8 +247,8 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
printf("\n"); printf("\n");
} }
#endif #endif
} else if (pusch_pdu->dmrs_config_type == pusch_dmrs_type2 && chest_freq == 0) { //pusch_dmrs_type2 |p_r,p_l,d,d,d,d,p_r,p_l,d,d,d,d| } else if (pusch_pdu->dmrs_config_type == pusch_dmrs_type2 && chest_freq == 0) { //pusch_dmrs_type2 |p_r,p_l,d,d,d,d,p_r,p_l,d,d,d,d|
LOG_D(PHY,"PUSCH estimation DMRS type 2, Freq-domain interpolation"); LOG_D(PHY,"PUSCH estimation DMRS type 2, Freq-domain interpolation");
c16_t *pil = pilot; c16_t *pil = pilot;
@@ -332,6 +275,8 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
multadd_real_four_symbols_vector_complex_scalar(filt8_ml2, multadd_real_four_symbols_vector_complex_scalar(filt8_ml2,
&ch_l, &ch_l,
ul_ch); ul_ch);
*max_ch = max(*max_ch, max(abs(ch_l.r), abs(ch_l.i)));
re_offset = (re_offset+5)%symbolSize; re_offset = (re_offset+5)%symbolSize;
ch_r=c16mulShift(*pil, ch_r=c16mulShift(*pil,
rxdataF[soffset+nushift+re_offset], rxdataF[soffset+nushift+re_offset],
@@ -339,6 +284,8 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
multadd_real_four_symbols_vector_complex_scalar(filt8_mr2, multadd_real_four_symbols_vector_complex_scalar(filt8_mr2,
&ch_r, &ch_r,
ul_ch); ul_ch);
*max_ch = max(*max_ch, max(abs(ch_r.r), abs(ch_r.i)));
//for (int re_idx = 0; re_idx < 8; re_idx += 2) //for (int re_idx = 0; re_idx < 8; re_idx += 2)
//printf("ul_ch = %d + j*%d\n", ul_ch[re_idx], ul_ch[re_idx+1]); //printf("ul_ch = %d + j*%d\n", ul_ch[re_idx], ul_ch[re_idx+1]);
ul_ch += 4; ul_ch += 4;
@@ -391,6 +338,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
for (int pilot_cnt=6; pilot_cnt<6*(nb_rb_pusch-1); pilot_cnt += 6) { for (int pilot_cnt=6; pilot_cnt<6*(nb_rb_pusch-1); pilot_cnt += 6) {
ch=c32x16cumulVectVectWithSteps(pilot, &pil_offset, 1, rxF, &re_offset, 2, symbolSize, 6); ch=c32x16cumulVectVectWithSteps(pilot, &pil_offset, 1, rxF, &re_offset, 2, symbolSize, 6);
*max_ch = max(*max_ch, max(abs(ch.r), abs(ch.i)));
#if NO_INTERP #if NO_INTERP
for (c16_t *end=ul_ch+12; ul_ch<end; ul_ch++) for (c16_t *end=ul_ch+12; ul_ch<end; ul_ch++)
@@ -484,6 +432,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
re_offset = (re_offset+5) % symbolSize; re_offset = (re_offset+5) % symbolSize;
ch=c16x32div(ch0, 4); ch=c16x32div(ch0, 4);
*max_ch = max(*max_ch, max(abs(ch.r), abs(ch.i)));
#if NO_INTERP #if NO_INTERP
for (c16_t *end=ul_ch+12; ul_ch<end; ul_ch++) for (c16_t *end=ul_ch+12; ul_ch<end; ul_ch++)
@@ -540,8 +489,8 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
printf("%d\n",idxP); printf("%d\n",idxP);
} }
#endif #endif
// Convert to time domain // Convert to time domain
freq2time(symbolSize, freq2time(symbolSize,
(int16_t *) &ul_ch_estimates[aarx][symbol_offset], (int16_t *) &ul_ch_estimates[aarx][symbol_offset],
@@ -37,6 +37,7 @@
\param symbol symbol within slot \param symbol symbol within slot
\param bwp_start_subcarrier, first allocated subcarrier \param bwp_start_subcarrier, first allocated subcarrier
\param nb_rb_pusch, number of allocated RBs for this UE \param nb_rb_pusch, number of allocated RBs for this UE
\param max_ch maximum value of estimated channel
*/ */
int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB, int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
@@ -45,7 +46,8 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
unsigned char symbol, unsigned char symbol,
int ul_id, int ul_id,
unsigned short bwp_start_subcarrier, unsigned short bwp_start_subcarrier,
nfapi_nr_pusch_pdu_t *pusch_pdu); nfapi_nr_pusch_pdu_t *pusch_pdu,
int *max_ch);
void dump_nr_I0_stats(FILE *fd,PHY_VARS_gNB *gNB); void dump_nr_I0_stats(FILE *fd,PHY_VARS_gNB *gNB);
@@ -155,7 +155,8 @@ void nr_ulsch_scale_channel(int32_t **ul_ch_estimates_ext,
uint8_t is_dmrs_symbol, uint8_t is_dmrs_symbol,
uint32_t len, uint32_t len,
uint8_t nrOfLayers, uint8_t nrOfLayers,
uint16_t nb_rb); uint16_t nb_rb,
int shift_ch_ext);
/** \brief This function computes the average channel level over all allocated RBs and antennas (TX/RX) in order to compute output shift for compensated signal /** \brief This function computes the average channel level over all allocated RBs and antennas (TX/RX) in order to compute output shift for compensated signal
@param ul_ch_estimates_ext Channel estimates in allocated RBs @param ul_ch_estimates_ext Channel estimates in allocated RBs
@@ -378,7 +378,7 @@ void nr_ulsch_extract_rbs(int32_t **rxdataF,
rxF_ext[rxF_ext_index + 1] = (rxF[(((start_re + re)*2) + 1) % (frame_parms->ofdm_symbol_size*2)]); rxF_ext[rxF_ext_index + 1] = (rxF[(((start_re + re)*2) + 1) % (frame_parms->ofdm_symbol_size*2)]);
rxF_ext_index +=2; rxF_ext_index +=2;
} }
ul_ch0_ext[ul_ch0_ext_index] = ul_ch0[ul_ch0_index]; ul_ch0_ext[ul_ch0_ext_index] = ul_ch0[ul_ch0_index];
ul_ch0_ext_index++; ul_ch0_ext_index++;
@@ -402,41 +402,42 @@ void nr_ulsch_scale_channel(int **ul_ch_estimates_ext,
uint8_t is_dmrs_symbol, uint8_t is_dmrs_symbol,
uint32_t len, uint32_t len,
uint8_t nrOfLayers, uint8_t nrOfLayers,
unsigned short nb_rb) unsigned short nb_rb,
int shift_ch_ext)
{ {
#if defined(__x86_64__)||defined(__i386__) #if defined(__x86_64__)||defined(__i386__)
short rb, ch_amp;
unsigned char aarx,aatx;
__m128i *ul_ch128, ch_amp128;
uint32_t nb_rb_0 = len/12 + ((len%12)?1:0);
// Determine scaling amplitude based the symbol // Determine scaling amplitude based the symbol
int b = 3;
short ch_amp = 1024 * 8;
if (shift_ch_ext > 3) {
b = 0;
ch_amp >>= (shift_ch_ext - 3);
if (ch_amp == 0) {
ch_amp = 1;
}
} else {
b -= shift_ch_ext;
}
__m128i ch_amp128 = _mm_set1_epi16(ch_amp); // Q3.13
LOG_D(PHY, "Scaling PUSCH Chest in OFDM symbol %d by %d, pilots %d nb_rb %d NCP %d symbol %d\n", symbol, ch_amp, is_dmrs_symbol, nb_rb, frame_parms->Ncp, symbol);
ch_amp = 1024*8; uint32_t nb_rb_0 = len / 12 + ((len % 12) ? 1 : 0);
int off = ((nb_rb & 1) == 1) ? 4 : 0;
LOG_D(PHY,"Scaling PUSCH Chest in OFDM symbol %d by %d, pilots %d nb_rb %d NCP %d symbol %d\n", symbol, ch_amp, is_dmrs_symbol, nb_rb, frame_parms->Ncp, symbol); for (int aatx = 0; aatx < nrOfLayers; aatx++) {
// printf("Scaling PUSCH Chest in OFDM symbol %d by %d\n",symbol_mod,ch_amp); for (int aarx = 0; aarx < frame_parms->nb_antennas_rx; aarx++) {
__m128i *ul_ch128 = (__m128i *)&ul_ch_estimates_ext[aatx * frame_parms->nb_antennas_rx + aarx][symbol * (off + (nb_rb * NR_NB_SC_PER_RB))];
ch_amp128 = _mm_set1_epi16(ch_amp); // Q3.13 for (int rb = 0; rb < nb_rb_0; rb++) {
int off = ((nb_rb&1) == 1)? 4:0;
for (aatx = 0; aatx < nrOfLayers; aatx++) {
for (aarx=0; aarx < frame_parms->nb_antennas_rx; aarx++) {
ul_ch128 = (__m128i *)&ul_ch_estimates_ext[aatx*frame_parms->nb_antennas_rx+aarx][symbol*(off+(nb_rb*NR_NB_SC_PER_RB))];
for (rb=0;rb < nb_rb_0;rb++) {
ul_ch128[0] = _mm_mulhi_epi16(ul_ch128[0], ch_amp128); ul_ch128[0] = _mm_mulhi_epi16(ul_ch128[0], ch_amp128);
ul_ch128[0] = _mm_slli_epi16(ul_ch128[0], 3); ul_ch128[0] = _mm_slli_epi16(ul_ch128[0], b);
ul_ch128[1] = _mm_mulhi_epi16(ul_ch128[1], ch_amp128); ul_ch128[1] = _mm_mulhi_epi16(ul_ch128[1], ch_amp128);
ul_ch128[1] = _mm_slli_epi16(ul_ch128[1], 3); ul_ch128[1] = _mm_slli_epi16(ul_ch128[1], b);
ul_ch128[2] = _mm_mulhi_epi16(ul_ch128[2], ch_amp128); ul_ch128[2] = _mm_mulhi_epi16(ul_ch128[2], ch_amp128);
ul_ch128[2] = _mm_slli_epi16(ul_ch128[2], 3); ul_ch128[2] = _mm_slli_epi16(ul_ch128[2], b);
ul_ch128+=3; ul_ch128 += 3;
} }
} }
} }
@@ -1902,6 +1903,7 @@ void nr_rx_pusch(PHY_VARS_gNB *gNB,
//--------------------- Channel estimation --------------------- //--------------------- Channel estimation ---------------------
//---------------------------------------------------------- //----------------------------------------------------------
start_meas(&gNB->ulsch_channel_estimation_stats); start_meas(&gNB->ulsch_channel_estimation_stats);
int max_ch = 0;
for(uint8_t symbol = rel15_ul->start_symbol_index; symbol < (rel15_ul->start_symbol_index + rel15_ul->nr_of_symbols); symbol++) { for(uint8_t symbol = rel15_ul->start_symbol_index; symbol < (rel15_ul->start_symbol_index + rel15_ul->nr_of_symbols); symbol++) {
uint8_t dmrs_symbol_flag = (rel15_ul->ul_dmrs_symb_pos >> symbol) & 0x01; uint8_t dmrs_symbol_flag = (rel15_ul->ul_dmrs_symb_pos >> symbol) & 0x01;
LOG_D(PHY, "symbol %d, dmrs_symbol_flag :%d\n", symbol, dmrs_symbol_flag); LOG_D(PHY, "symbol %d, dmrs_symbol_flag :%d\n", symbol, dmrs_symbol_flag);
@@ -1918,7 +1920,8 @@ void nr_rx_pusch(PHY_VARS_gNB *gNB,
symbol, symbol,
ulsch_id, ulsch_id,
bwp_start_subcarrier, bwp_start_subcarrier,
rel15_ul); rel15_ul,
&max_ch);
} }
nr_gnb_measurements(gNB, ulsch_id, harq_pid, symbol,rel15_ul->nrOfLayers); nr_gnb_measurements(gNB, ulsch_id, harq_pid, symbol,rel15_ul->nrOfLayers);
@@ -1960,6 +1963,7 @@ void nr_rx_pusch(PHY_VARS_gNB *gNB,
int off = ((rel15_ul->rb_size&1) == 1)? 4:0; int off = ((rel15_ul->rb_size&1) == 1)? 4:0;
uint32_t rxdataF_ext_offset = 0; uint32_t rxdataF_ext_offset = 0;
uint8_t shift_ch_ext = rel15_ul->nrOfLayers > 1 ? log2_approx(max_ch >> 11) : 0;
uint8_t ad_shift = 1 + log2_approx(frame_parms->nb_antennas_rx >> 2) + (rel15_ul->nrOfLayers == 2); uint8_t ad_shift = 1 + log2_approx(frame_parms->nb_antennas_rx >> 2) + (rel15_ul->nrOfLayers == 2);
for(uint8_t symbol = rel15_ul->start_symbol_index; symbol < (rel15_ul->start_symbol_index + rel15_ul->nr_of_symbols); symbol++) { for(uint8_t symbol = rel15_ul->start_symbol_index; symbol < (rel15_ul->start_symbol_index + rel15_ul->nr_of_symbols); symbol++) {
@@ -2005,13 +2009,14 @@ void nr_rx_pusch(PHY_VARS_gNB *gNB,
//--------------------- Channel Scaling -------------------- //--------------------- Channel Scaling --------------------
//---------------------------------------------------------- //----------------------------------------------------------
nr_ulsch_scale_channel(gNB->pusch_vars[ulsch_id]->ul_ch_estimates_ext, nr_ulsch_scale_channel(gNB->pusch_vars[ulsch_id]->ul_ch_estimates_ext,
frame_parms, frame_parms,
gNB->ulsch[ulsch_id], gNB->ulsch[ulsch_id],
symbol, symbol,
dmrs_symbol_flag, dmrs_symbol_flag,
nb_re_pusch, nb_re_pusch,
rel15_ul->nrOfLayers, rel15_ul->nrOfLayers,
rel15_ul->rb_size); rel15_ul->rb_size,
shift_ch_ext);
if (gNB->pusch_vars[ulsch_id]->cl_done==0) { if (gNB->pusch_vars[ulsch_id]->cl_done==0) {
nr_ulsch_channel_level(gNB->pusch_vars[ulsch_id]->ul_ch_estimates_ext, nr_ulsch_channel_level(gNB->pusch_vars[ulsch_id]->ul_ch_estimates_ext,
+8
View File
@@ -68,6 +68,14 @@
#include <pthread.h> #include <pthread.h>
#include "assertions.h" #include "assertions.h"
#if UE_TIMING_TRACE
#define start_UE_TIMING(a) start_meas(&(a))
#define stop_UE_TIMING(a) stop_meas(&(a))
#else
#define start_UE_TIMING(a)
#define stop_UE_TIMING(a)
#endif
#ifdef MEX #ifdef MEX
#include "mex.h" #include "mex.h"
#define msg mexPrintf #define msg mexPrintf
+13 -72
View File
@@ -1447,23 +1447,12 @@ void pusch_procedures(PHY_VARS_eNB *eNB,L1_rxtx_proc_t *proc) {
rx_ulsch(eNB,proc, i); rx_ulsch(eNB,proc, i);
stop_meas(&eNB->ulsch_demodulation_stats); stop_meas(&eNB->ulsch_demodulation_stats);
start_meas(&eNB->ulsch_decoding_stats); start_meas(&eNB->ulsch_decoding_stats);
ulsch_decoding(eNB,proc, ulsch_decoding(eNB,
i, proc,
0, // control_only_flag i,
ulsch_harq->V_UL_DAI, 0, // control_only_flag
ulsch_harq->nb_rb>20 ? 1 : 0); ulsch_harq->V_UL_DAI,
stop_meas(&eNB->ulsch_decoding_stats); ulsch_harq->nb_rb > 20 ? 1 : 0);
/*
int ulsch_id=-1;
for (ulsch_id=0;ulsch_id<NUMBER_OF_ULSCH_MAX;ulsch_id++)
if (ulsch->rnti == eNB->ulsch_stats[ulsch_id].rnti) break;
AssertFatal(ulsch_id>=0,"no ulsch_id found\n");
if (eNB->ulsch_stats[ulsch_id].round_trials[0]>100) {
dump_ulsch(eNB,frame,subframe,i,ulsch_harq->round);
AssertFatal(1==0,"exiting\n");
}
*/
} }
else if ((ulsch) && else if ((ulsch) &&
(ulsch->rnti>0) && (ulsch->rnti>0) &&
@@ -1478,70 +1467,22 @@ void pusch_procedures(PHY_VARS_eNB *eNB,L1_rxtx_proc_t *proc) {
LOG_W (PHY, "Removing stale ULSCH config for UE %x harq_pid %d (harq_mask is now 0x%2.2x)\n", ulsch->rnti, harq_pid, ulsch->harq_mask); LOG_W (PHY, "Removing stale ULSCH config for UE %x harq_pid %d (harq_mask is now 0x%2.2x)\n", ulsch->rnti, harq_pid, ulsch->harq_mask);
} }
} // for (i=0; i<NUMBER_OF_ULSCH_MAX; i++) } // for (i=0; i<NUMBER_OF_ULSCH_MAX; i++)
const bool decode = proc->nbDecode;
while (proc->nbDecode > 0) { while (proc->nbDecode > 0) {
notifiedFIFO_elt_t *req=pullTpool(proc->respDecode, proc->threadPool); notifiedFIFO_elt_t *req=pullTpool(proc->respDecode, proc->threadPool);
if (req == NULL) if (req == NULL)
break; // Tpool has been stopped break; // Tpool has been stopped
postDecode(proc, req); postDecode(proc, req);
const time_stats_t ts = exec_time_stats_NotifiedFIFO(req);
merge_meas(&eNB->ulsch_turbo_decoding_stats, &ts);
delNotifiedFIFO_elt(req); delNotifiedFIFO_elt(req);
} }
if (decode)
stop_meas(&eNB->ulsch_decoding_stats);
} }
extern int oai_exit; extern int oai_exit;
extern void *td_thread (void *);
void init_td_thread(PHY_VARS_eNB *eNB) {
/*
L1_proc_t *proc = &eNB->proc;
proc->tdp.eNB = eNB;
proc->instance_cnt_td = -1;
threadCreate(&proc->pthread_td, td_thread, (void *)&proc->tdp, "TD", -1, OAI_PRIORITY_RT);
*/
}
void kill_td_thread(PHY_VARS_eNB *eNB) {
/*
L1_proc_t *proc = &eNB->proc;
proc->instance_cnt_td = 0;
pthread_cond_signal(&proc->cond_td);
pthread_join(proc->pthread_td, NULL);
pthread_mutex_destroy( &proc->mutex_td );
pthread_cond_destroy( &proc->cond_td );
*/
}
extern void *te_thread (void *);
void init_te_thread(PHY_VARS_eNB *eNB) {
/*
L1_proc_t *proc = &eNB->proc;
for(int i=0; i<3 ; i++) {
proc->tep[i].eNB = eNB;
proc->tep[i].instance_cnt_te = -1;
LOG_I(PHY,"Creating te_thread %d\n",i);
char txt[128];
sprintf(txt,"TE_%d", i);
threadCreate(&proc->tep[i].pthread_te, te_thread, (void *)&proc->tep[i], txt, -1, OAI_PRIORITY_RT);
}
*/
}
void kill_te_thread(PHY_VARS_eNB *eNB) {
/*
L1_proc_t *proc = &eNB->proc;
for(int i=0; i<3 ; i++) {
proc->tep[i].instance_cnt_te = 0;
pthread_cond_signal(&proc->tep[i].cond_te);
pthread_join(proc->tep[i].pthread_te, NULL);
pthread_mutex_destroy( &proc->tep[i].mutex_te);
pthread_cond_destroy( &proc->tep[i].cond_te);
}
*/
}
void fill_rx_indication(PHY_VARS_eNB *eNB, void fill_rx_indication(PHY_VARS_eNB *eNB,
int ULSCH_id, int ULSCH_id,
-7
View File
@@ -990,13 +990,6 @@ int main(int argc, char **argv) {
eNB->mac_enabled=1; eNB->mac_enabled=1;
if(get_thread_worker_conf() == WORKER_ENABLE) {
extern void init_td_thread(PHY_VARS_eNB *);
extern void init_te_thread(PHY_VARS_eNB *);
init_td_thread(eNB);
init_te_thread(eNB);
}
// callback functions required for phy_procedures_tx // callback functions required for phy_procedures_tx
// eNB_id_i = UE->n_connected_eNB; // eNB_id_i = UE->n_connected_eNB;
printf("Setting mcs1 = %d\n",mcs1); printf("Setting mcs1 = %d\n",mcs1);
-8
View File
@@ -1109,14 +1109,6 @@ int main(int argc, char **argv) {
eNB->frame_parms.Nid_cell_mbsfn=0; eNB->frame_parms.Nid_cell_mbsfn=0;
#endif #endif
if(get_thread_worker_conf() == WORKER_ENABLE) {
extern void init_td_thread(PHY_VARS_eNB *);
extern void init_te_thread(PHY_VARS_eNB *);
init_td_thread(eNB);
init_te_thread(eNB);
}
// callback functions required for phy_procedures_tx // callback functions required for phy_procedures_tx
// eNB_id_i = UE->n_connected_eNB; // eNB_id_i = UE->n_connected_eNB;
printf("Setting mcs1 = %d\n",mcs1); printf("Setting mcs1 = %d\n",mcs1);
+7 -10
View File
@@ -744,9 +744,7 @@ int main(int argc, char **argv) {
if(get_thread_worker_conf() == WORKER_ENABLE) { if(get_thread_worker_conf() == WORKER_ENABLE) {
extern void init_fep_thread(RU_t *, pthread_attr_t *); extern void init_fep_thread(RU_t *, pthread_attr_t *);
extern void init_td_thread(PHY_VARS_eNB *); init_fep_thread(ru, NULL);
init_fep_thread(ru,NULL);
init_td_thread(eNB);
} }
// Create transport channel structures for 2 transport blocks (MIMO) // Create transport channel structures for 2 transport blocks (MIMO)
@@ -1379,13 +1377,12 @@ int main(int argc, char **argv) {
printStatIndent2(&eNB->ulsch_deinterleaving_stats,"sub-block interleaving" ); printStatIndent2(&eNB->ulsch_deinterleaving_stats,"sub-block interleaving" );
printStatIndent2(&eNB->ulsch_demultiplexing_stats,"sub-block demultiplexing" ); printStatIndent2(&eNB->ulsch_demultiplexing_stats,"sub-block demultiplexing" );
printStatIndent2(&eNB->ulsch_rate_unmatching_stats,"sub-block rate-matching" ); printStatIndent2(&eNB->ulsch_rate_unmatching_stats,"sub-block rate-matching" );
printf(" |__ turbo_decoder(%d bits), avg iterations: %.1f %.2f us (%d cycles, %d trials)\n", printf(" |__ harqID: %d turbo_decoder(%d bits), avg iterations: %.1f %.2f us (%d cycles, %d trials)\n",
eNB->ulsch[0]->harq_processes[harq_pid]->Cminus ? harq_pid,
eNB->ulsch[0]->harq_processes[harq_pid]->Kminus : eNB->ulsch[0]->harq_processes[harq_pid]->Cminus ? eNB->ulsch[0]->harq_processes[harq_pid]->Kminus : eNB->ulsch[0]->harq_processes[harq_pid]->Kplus,
eNB->ulsch[0]->harq_processes[harq_pid]->Kplus, eNB->ulsch_tc_intl1_stats.trials / (double)eNB->ulsch_tc_init_stats.trials,
eNB->ulsch_tc_intl1_stats.trials/(double)eNB->ulsch_tc_init_stats.trials, (double)eNB->ulsch_turbo_decoding_stats.diff / eNB->ulsch_turbo_decoding_stats.trials * timeBase,
(double)eNB->ulsch_turbo_decoding_stats.diff/eNB->ulsch_turbo_decoding_stats.trials*timeBase, (int)((double)eNB->ulsch_turbo_decoding_stats.diff / eNB->ulsch_turbo_decoding_stats.trials),
(int)((double)eNB->ulsch_turbo_decoding_stats.diff/eNB->ulsch_turbo_decoding_stats.trials),
eNB->ulsch_turbo_decoding_stats.trials); eNB->ulsch_turbo_decoding_stats.trials);
printStatIndent3(&eNB->ulsch_tc_init_stats,"init"); printStatIndent3(&eNB->ulsch_tc_init_stats,"init");
printStatIndent3(&eNB->ulsch_tc_alpha_stats,"alpha"); printStatIndent3(&eNB->ulsch_tc_alpha_stats,"alpha");
+3 -3
View File
@@ -358,11 +358,11 @@ typedef struct cu_to_du_rrc_information_s {
typedef struct du_to_du_rrc_information_s { typedef struct du_to_du_rrc_information_s {
uint8_t * cellGroupConfig; uint8_t * cellGroupConfig;
uint8_t cellGroupConfig_length; uint32_t cellGroupConfig_length;
uint8_t * measGapConfig; uint8_t * measGapConfig;
uint8_t measGapConfig_length; uint32_t measGapConfig_length;
uint8_t * requestedP_MaxFR1; uint8_t * requestedP_MaxFR1;
uint8_t requestedP_MaxFR1_length; uint32_t requestedP_MaxFR1_length;
}du_to_cu_rrc_information_t; }du_to_cu_rrc_information_t;
typedef enum QoS_information_e { typedef enum QoS_information_e {
File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More