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:
+40
-60
@@ -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
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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
@@ -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()
|
||||||
|
|
||||||
|
|||||||
@@ -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
@@ -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):
|
||||||
|
|||||||
@@ -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
@@ -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
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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">
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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
@@ -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).
|
||||||
|
|
||||||
----
|
----
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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"]
|
||||||
|
|||||||
@@ -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"]
|
||||||
Executable
+39
@@ -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
|
||||||
@@ -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
@@ -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
@@ -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);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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");
|
||||||
|
|||||||
@@ -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
@@ -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] = "--";
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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");
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
+270
-275
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
Reference in New Issue
Block a user