Commit f54ca571 authored by Robert Schmidt's avatar Robert Schmidt

Merge branch 'integration_2024_w45' into 'develop'

Integration: `2024.w45`

See merge request oai/openairinterface5g!3097

* !3048 Cleanup and refactoring at gNB initialization
* !3077 Address most thread safety issues in NR UE
* !3089 Improve cross-compile documentation
* !3092 Remove Interop-F1/Accelleran-CU testing pipeline
* !3096 Remove x86-specific instructions from telnet server
* !2949 Better polar decode
* !3070 CI: Add test with 4 DL layers, 60 MHz BW to SA-2x2 pipeline
* !3098 nr rlc: hotfix: test allocation valid before use
* !3090 Add UL PRBs Blacklist section to NR_SA_Tutorial_COTS_UE.md
* !3082 fix blocking bugs in command nr_dlsim -n100 -e27 -s35 -b 273 -R273 -x4 -y4 -z4
* !3100 CI: Remove 5g_l2sim files
* !3024 Set SA mode as default
* !3087 Remove some usage of the old CI sshConnection class
* !3074 CI: cleanup of cls_physim.py
parents e8d8384e c847ac78
...@@ -772,7 +772,7 @@ set(PHY_TURBOSRC ...@@ -772,7 +772,7 @@ set(PHY_TURBOSRC
${OPENAIR1_DIR}/PHY/CODING/3gpplte_turbo_decoder.c ${OPENAIR1_DIR}/PHY/CODING/3gpplte_turbo_decoder.c
) )
set(PHY_POLARSRC set(PHY_POLARSRC
${OPENAIR1_DIR}/PHY/CODING/nr_polar_init.c ${OPENAIR1_DIR}/PHY/CODING/nrPolar_tools/nr_polar_init.c
${OPENAIR1_DIR}/PHY/CODING/nrPolar_tools/nr_bitwise_operations.c ${OPENAIR1_DIR}/PHY/CODING/nrPolar_tools/nr_bitwise_operations.c
${OPENAIR1_DIR}/PHY/CODING/nrPolar_tools/nr_crc_byte.c ${OPENAIR1_DIR}/PHY/CODING/nrPolar_tools/nr_crc_byte.c
${OPENAIR1_DIR}/PHY/CODING/nrPolar_tools/nr_polar_decoder.c ${OPENAIR1_DIR}/PHY/CODING/nrPolar_tools/nr_polar_decoder.c
......
...@@ -493,29 +493,6 @@ pipeline { ...@@ -493,29 +493,6 @@ pipeline {
} }
} }
} }
stage ("Interop-F1") {
when { expression {do5Gtest} }
steps {
script {
triggerSlaveJob ('RAN-Interop-F1', 'Interop-F1')
}
}
post {
always {
script {
// Using a unique variable name for each test stage to avoid overwriting on a global variable
// due to parallel-time concurrency
f1InteropStatus = finalizeSlaveJob('RAN-Interop-F1')
}
}
failure {
script {
currentBuild.result = 'FAILURE'
failingStages += f1InteropStatus
}
}
}
}
stage ("Sanity-Check OAI-CN5G") { stage ("Sanity-Check OAI-CN5G") {
when { expression {do5Gtest} } when { expression {do5Gtest} }
steps { steps {
......
...@@ -41,7 +41,7 @@ import constants as CONST ...@@ -41,7 +41,7 @@ import constants as CONST
#----------------------------------------------------------- #-----------------------------------------------------------
def ArgsParse(argvs,CiTestObj,RAN,HTML,EPC,ldpc,CONTAINERS,HELP,SCA,PHYSIM,CLUSTER): def ArgsParse(argvs,CiTestObj,RAN,HTML,EPC,CONTAINERS,HELP,SCA,PHYSIM,CLUSTER):
py_param_file_present = False py_param_file_present = False
...@@ -78,7 +78,6 @@ def ArgsParse(argvs,CiTestObj,RAN,HTML,EPC,ldpc,CONTAINERS,HELP,SCA,PHYSIM,CLUST ...@@ -78,7 +78,6 @@ def ArgsParse(argvs,CiTestObj,RAN,HTML,EPC,ldpc,CONTAINERS,HELP,SCA,PHYSIM,CLUST
CiTestObj.ranRepository = matchReg.group(1) CiTestObj.ranRepository = matchReg.group(1)
RAN.ranRepository=matchReg.group(1) RAN.ranRepository=matchReg.group(1)
HTML.ranRepository=matchReg.group(1) HTML.ranRepository=matchReg.group(1)
ldpc.ranRepository=matchReg.group(1)
CONTAINERS.ranRepository=matchReg.group(1) CONTAINERS.ranRepository=matchReg.group(1)
SCA.ranRepository=matchReg.group(1) SCA.ranRepository=matchReg.group(1)
PHYSIM.ranRepository=matchReg.group(1) PHYSIM.ranRepository=matchReg.group(1)
...@@ -89,7 +88,6 @@ def ArgsParse(argvs,CiTestObj,RAN,HTML,EPC,ldpc,CONTAINERS,HELP,SCA,PHYSIM,CLUST ...@@ -89,7 +88,6 @@ def ArgsParse(argvs,CiTestObj,RAN,HTML,EPC,ldpc,CONTAINERS,HELP,SCA,PHYSIM,CLUST
else: else:
matchReg = re.match('^\-\-ranAllowMerge=(.+)$', myArgv, re.IGNORECASE) matchReg = re.match('^\-\-ranAllowMerge=(.+)$', myArgv, re.IGNORECASE)
doMerge = matchReg.group(1) doMerge = matchReg.group(1)
ldpc.ranAllowMerge=matchReg.group(1)
if ((doMerge == 'true') or (doMerge == 'True')): if ((doMerge == 'true') or (doMerge == 'True')):
CiTestObj.ranAllowMerge = True CiTestObj.ranAllowMerge = True
RAN.ranAllowMerge=True RAN.ranAllowMerge=True
...@@ -106,7 +104,6 @@ def ArgsParse(argvs,CiTestObj,RAN,HTML,EPC,ldpc,CONTAINERS,HELP,SCA,PHYSIM,CLUST ...@@ -106,7 +104,6 @@ def ArgsParse(argvs,CiTestObj,RAN,HTML,EPC,ldpc,CONTAINERS,HELP,SCA,PHYSIM,CLUST
CiTestObj.ranBranch = matchReg.group(1) CiTestObj.ranBranch = matchReg.group(1)
RAN.ranBranch=matchReg.group(1) RAN.ranBranch=matchReg.group(1)
HTML.ranBranch=matchReg.group(1) HTML.ranBranch=matchReg.group(1)
ldpc.ranBranch=matchReg.group(1)
CONTAINERS.ranBranch=matchReg.group(1) CONTAINERS.ranBranch=matchReg.group(1)
SCA.ranBranch=matchReg.group(1) SCA.ranBranch=matchReg.group(1)
PHYSIM.ranBranch=matchReg.group(1) PHYSIM.ranBranch=matchReg.group(1)
...@@ -119,7 +116,6 @@ def ArgsParse(argvs,CiTestObj,RAN,HTML,EPC,ldpc,CONTAINERS,HELP,SCA,PHYSIM,CLUST ...@@ -119,7 +116,6 @@ def ArgsParse(argvs,CiTestObj,RAN,HTML,EPC,ldpc,CONTAINERS,HELP,SCA,PHYSIM,CLUST
CiTestObj.ranCommitID = matchReg.group(1) CiTestObj.ranCommitID = matchReg.group(1)
RAN.ranCommitID=matchReg.group(1) RAN.ranCommitID=matchReg.group(1)
HTML.ranCommitID=matchReg.group(1) HTML.ranCommitID=matchReg.group(1)
ldpc.ranCommitID=matchReg.group(1)
CONTAINERS.ranCommitID=matchReg.group(1) CONTAINERS.ranCommitID=matchReg.group(1)
SCA.ranCommitID=matchReg.group(1) SCA.ranCommitID=matchReg.group(1)
PHYSIM.ranCommitID=matchReg.group(1) PHYSIM.ranCommitID=matchReg.group(1)
...@@ -132,7 +128,6 @@ def ArgsParse(argvs,CiTestObj,RAN,HTML,EPC,ldpc,CONTAINERS,HELP,SCA,PHYSIM,CLUST ...@@ -132,7 +128,6 @@ def ArgsParse(argvs,CiTestObj,RAN,HTML,EPC,ldpc,CONTAINERS,HELP,SCA,PHYSIM,CLUST
CiTestObj.ranTargetBranch = matchReg.group(1) CiTestObj.ranTargetBranch = matchReg.group(1)
RAN.ranTargetBranch=matchReg.group(1) RAN.ranTargetBranch=matchReg.group(1)
HTML.ranTargetBranch=matchReg.group(1) HTML.ranTargetBranch=matchReg.group(1)
ldpc.ranTargetBranch=matchReg.group(1)
CONTAINERS.ranTargetBranch=matchReg.group(1) CONTAINERS.ranTargetBranch=matchReg.group(1)
SCA.ranTargetBranch=matchReg.group(1) SCA.ranTargetBranch=matchReg.group(1)
PHYSIM.ranTargetBranch=matchReg.group(1) PHYSIM.ranTargetBranch=matchReg.group(1)
...@@ -141,7 +136,6 @@ def ArgsParse(argvs,CiTestObj,RAN,HTML,EPC,ldpc,CONTAINERS,HELP,SCA,PHYSIM,CLUST ...@@ -141,7 +136,6 @@ def ArgsParse(argvs,CiTestObj,RAN,HTML,EPC,ldpc,CONTAINERS,HELP,SCA,PHYSIM,CLUST
if re.match('^\-\-eNBIPAddress=(.+)$', myArgv, re.IGNORECASE): if re.match('^\-\-eNBIPAddress=(.+)$', myArgv, re.IGNORECASE):
matchReg = re.match('^\-\-eNBIPAddress=(.+)$', myArgv, re.IGNORECASE) matchReg = re.match('^\-\-eNBIPAddress=(.+)$', myArgv, re.IGNORECASE)
RAN.eNBIPAddress=matchReg.group(1) RAN.eNBIPAddress=matchReg.group(1)
ldpc.eNBIpAddr=matchReg.group(1)
CONTAINERS.eNBIPAddress=matchReg.group(1) CONTAINERS.eNBIPAddress=matchReg.group(1)
SCA.eNBIPAddress=matchReg.group(1) SCA.eNBIPAddress=matchReg.group(1)
PHYSIM.eNBIPAddress=matchReg.group(1) PHYSIM.eNBIPAddress=matchReg.group(1)
...@@ -158,7 +152,6 @@ def ArgsParse(argvs,CiTestObj,RAN,HTML,EPC,ldpc,CONTAINERS,HELP,SCA,PHYSIM,CLUST ...@@ -158,7 +152,6 @@ def ArgsParse(argvs,CiTestObj,RAN,HTML,EPC,ldpc,CONTAINERS,HELP,SCA,PHYSIM,CLUST
if re.match('^\-\-eNBUserName=(.+)$', myArgv, re.IGNORECASE): if re.match('^\-\-eNBUserName=(.+)$', myArgv, re.IGNORECASE):
matchReg = re.match('^\-\-eNBUserName=(.+)$', myArgv, re.IGNORECASE) matchReg = re.match('^\-\-eNBUserName=(.+)$', myArgv, re.IGNORECASE)
RAN.eNBUserName=matchReg.group(1) RAN.eNBUserName=matchReg.group(1)
ldpc.eNBUserName=matchReg.group(1)
CONTAINERS.eNBUserName=matchReg.group(1) CONTAINERS.eNBUserName=matchReg.group(1)
SCA.eNBUserName=matchReg.group(1) SCA.eNBUserName=matchReg.group(1)
PHYSIM.eNBUserName=matchReg.group(1) PHYSIM.eNBUserName=matchReg.group(1)
...@@ -175,7 +168,6 @@ def ArgsParse(argvs,CiTestObj,RAN,HTML,EPC,ldpc,CONTAINERS,HELP,SCA,PHYSIM,CLUST ...@@ -175,7 +168,6 @@ def ArgsParse(argvs,CiTestObj,RAN,HTML,EPC,ldpc,CONTAINERS,HELP,SCA,PHYSIM,CLUST
if re.match('^\-\-eNBPassword=(.+)$', myArgv, re.IGNORECASE): if re.match('^\-\-eNBPassword=(.+)$', myArgv, re.IGNORECASE):
matchReg = re.match('^\-\-eNBPassword=(.+)$', myArgv, re.IGNORECASE) matchReg = re.match('^\-\-eNBPassword=(.+)$', myArgv, re.IGNORECASE)
RAN.eNBPassword=matchReg.group(1) RAN.eNBPassword=matchReg.group(1)
ldpc.eNBPassWord=matchReg.group(1)
CONTAINERS.eNBPassword=matchReg.group(1) CONTAINERS.eNBPassword=matchReg.group(1)
SCA.eNBPassword=matchReg.group(1) SCA.eNBPassword=matchReg.group(1)
PHYSIM.eNBPassword=matchReg.group(1) PHYSIM.eNBPassword=matchReg.group(1)
...@@ -192,7 +184,6 @@ def ArgsParse(argvs,CiTestObj,RAN,HTML,EPC,ldpc,CONTAINERS,HELP,SCA,PHYSIM,CLUST ...@@ -192,7 +184,6 @@ def ArgsParse(argvs,CiTestObj,RAN,HTML,EPC,ldpc,CONTAINERS,HELP,SCA,PHYSIM,CLUST
if re.match('^\-\-eNBSourceCodePath=(.+)$', myArgv, re.IGNORECASE): if re.match('^\-\-eNBSourceCodePath=(.+)$', myArgv, re.IGNORECASE):
matchReg = re.match('^\-\-eNBSourceCodePath=(.+)$', myArgv, re.IGNORECASE) matchReg = re.match('^\-\-eNBSourceCodePath=(.+)$', myArgv, re.IGNORECASE)
RAN.eNBSourceCodePath=matchReg.group(1) RAN.eNBSourceCodePath=matchReg.group(1)
ldpc.eNBSourceCodePath=matchReg.group(1)
CONTAINERS.eNBSourceCodePath=matchReg.group(1) CONTAINERS.eNBSourceCodePath=matchReg.group(1)
SCA.eNBSourceCodePath=matchReg.group(1) SCA.eNBSourceCodePath=matchReg.group(1)
PHYSIM.eNBSourceCodePath=matchReg.group(1) PHYSIM.eNBSourceCodePath=matchReg.group(1)
......
...@@ -382,20 +382,6 @@ rfsim4g_ue_fembms: ...@@ -382,20 +382,6 @@ rfsim4g_ue_fembms:
CmdPrefix: docker exec rfsim4g-oai-lte-ue0 CmdPrefix: docker exec rfsim4g-oai-lte-ue0
IF: oaitun_uem1 IF: oaitun_uem1
l2sim5g_ue:
Host: "%%current_host%%"
AttachScript: docker start l2sim-oai-nr-ue0
DetachScript: docker stop l2sim-oai-nr-ue0
NetworkScript: docker exec l2sim-oai-nr-ue0 ip a show dev oaitun_ue1
CmdPrefix: docker exec l2sim-oai-nr-ue0
IF: oaitun_ue1
MTU: 1500
l2sim5g_ext_dn:
Host: "%%current_host%%"
NetworkScript: docker exec l2sim-oai-ext-dn ip a show dev eth0
CmdPrefix: docker exec l2sim-oai-ext-dn
l2sim4g_ue: l2sim4g_ue:
Host: "%%current_host%%" Host: "%%current_host%%"
AttachScript: docker start l2sim4g-oai-lte-ue1 AttachScript: docker start l2sim4g-oai-lte-ue1
......
#/*
# * 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
# */
#---------------------------------------------------------------------
import logging
import re
# Define the mapping of physim_test values to search patterns
PHYSIM_PATTERN_MAPPING = {
'nr_ulsim': [
r'(Total PHY proc rx)\s+(\d+\.\d+)\s+us', # Pattern for RX PHY processing time
r'(ULSCH total decoding time)\s+(\d+\.\d+)\s+us', # Pattern for ULSCH decoding time
],
'nr_dlsim': [
r'(PHY proc tx)\s+(\d+\.\d+)\s+us', # Pattern for TX PHY processing time
r'(DLSCH encoding time)\s+(\d+\.\d+)\s+us', # Pattern for DLSCH encoding time
],
'ldpctest': [
r'(Encoding time mean):\s+(\d+\.\d+)\s+us', # Pattern for encoding time mean
r'(Decoding time mean):\s+(\d+\.\d+)\s+us', # Pattern for decoding time mean
],
}
# Define test conditions based on the simulation type
PHYSIM_TEST_CONDITION = {
'nr_ulsim': 'test OK', # For nr_ulsim, check if 'test OK' is present
'nr_dlsim': 'test OK', # For nr_dlsim, check if 'test OK' is present
'ldpctest': None, # No condition for ldpctest, just process the patterns
}
class Analysis():
def analyze_physim(log, physim_test, options, threshold):
search_patterns = PHYSIM_PATTERN_MAPPING.get(physim_test)
test_condition = PHYSIM_TEST_CONDITION.get(physim_test)
success = False
msg = ''
try:
with open(log, 'r') as f:
log_content = f.read()
except FileNotFoundError as e:
msg = f'{log} file not found, exception: {e}'
return False, msg
except Exception as e:
msg = f'Error while parsing log file {log}: exception: {e}'
return False, msg
if test_condition and test_condition not in log_content:
msg = f"Test did not succeed, '{test_condition}' not found in log file {log}."
return False, msg
time1_match = re.search(search_patterns[0], log_content)
time2_match = re.search(search_patterns[1], log_content)
if not(time1_match and time2_match):
msg = f"Processing time not found in log file {log}."
return False, msg
success = float(time2_match.group(2)) < float(threshold)
if success:
msg = f'{time1_match.group(1)}: {time1_match.group(2)} us\n{time2_match.group(1)}: {time2_match.group(2)} us'
else:
msg = f'{time1_match.group(1)}: {time1_match.group(2)} us\n{time2_match.group(1)}: {time2_match.group(2)} us exceeds a limit of {threshold} us'
return success,msg
This diff is collapsed.
...@@ -22,11 +22,15 @@ ...@@ -22,11 +22,15 @@
import logging import logging
import re import re
import os
import cls_cmd import cls_cmd
import cls_oai_html import cls_oai_html
import cls_analysis
import constants as CONST import constants as CONST
LOG_PATH_PHYSIM = 'phy_sim_logs'
class Native(): class Native():
def Build(test_case, HTML, host, directory, options): def Build(test_case, HTML, host, directory, options):
...@@ -62,3 +66,19 @@ class Native(): ...@@ -62,3 +66,19 @@ class Native():
logging.error('\u001B[1m Building OAI Failed\u001B[0m') logging.error('\u001B[1m Building OAI Failed\u001B[0m')
HTML.CreateHtmlTestRow(options, 'KO', CONST.ALL_PROCESSES_OK) HTML.CreateHtmlTestRow(options, 'KO', CONST.ALL_PROCESSES_OK)
return success return success
def Run_Physim(HTML, host, directory, options, physim_test, threshold):
logging.debug(f'Runnin {physim_test} on server: {host}')
workSpacePath = f'{directory}/cmake_targets'
os.system(f'mkdir -p ./{LOG_PATH_PHYSIM}')
runLogFile=f'physim_{HTML.testCase_id}.log'
with cls_cmd.getConnection(host) as cmd:
cmd.run(f'sudo {workSpacePath}/ran_build/build/{physim_test} {options} >> {workSpacePath}/{runLogFile}')
cmd.copyin(src=f'{workSpacePath}/{runLogFile}', tgt=f'{LOG_PATH_PHYSIM}/{runLogFile}')
success, msg = cls_analysis.Analysis.analyze_physim(f'{LOG_PATH_PHYSIM}/{runLogFile}', physim_test, options, threshold)
if success:
HTML.CreateHtmlTestRowQueue(options, 'OK', [msg])
else:
logging.error(msg)
HTML.CreateHtmlTestRowQueue(options, 'KO', [msg])
return success
...@@ -43,7 +43,6 @@ import json ...@@ -43,7 +43,6 @@ import json
#import our libs #import our libs
import helpreadme as HELP import helpreadme as HELP
import constants as CONST import constants as CONST
import sshconnection
import cls_module import cls_module
import cls_cmd import cls_cmd
...@@ -649,7 +648,7 @@ class OaiCiTest(): ...@@ -649,7 +648,7 @@ class OaiCiTest():
result = re.search('warning: discard PDU, sn out of window', str(line)) result = re.search('warning: discard PDU, sn out of window', str(line))
if result is not None: if result is not None:
nbPduDiscard += 1 nbPduDiscard += 1
result = re.search('--nfapi STANDALONE_PNF --node-number 2 --sa', str(line)) result = re.search('--nfapi STANDALONE_PNF --node-number 2', str(line))
if result is not None: if result is not None:
frequency_found = True frequency_found = True
result = re.search('Exiting OAI softmodem', str(line)) result = re.search('Exiting OAI softmodem', str(line))
...@@ -895,55 +894,43 @@ class OaiCiTest(): ...@@ -895,55 +894,43 @@ class OaiCiTest():
SourceCodePath = self.UESourceCodePath SourceCodePath = self.UESourceCodePath
else: else:
sys.exit('Insufficient Parameter') sys.exit('Insufficient Parameter')
SSH = sshconnection.SSHConnection() with cls_cmd.getConnection(IPAddress) as cmd:
SSH.open(IPAddress, UserName, Password) d = f'{SourceCodePath}/cmake_targets'
SSH.command(f'cd {SourceCodePath}', '\$', 5) cmd.run(f'rm -f {d}/build.log.zip')
SSH.command('cd cmake_targets', '\$', 5) cmd.run(f'cd {d} && zip -r build.log.zip build_log_*/*')
SSH.command('rm -f build.log.zip', '\$', 5)
SSH.command('zip -r build.log.zip build_log_*/*', '\$', 60)
SSH.close()
def LogCollectPing(self,EPC): def LogCollectPing(self,EPC):
# Some pipelines are using "none" IP / Credentials # Some pipelines are using "none" IP / Credentials
# In that case, just forget about it # In that case, just forget about it
if EPC.IPAddress == 'none': if EPC.IPAddress == 'none':
sys.exit(0) sys.exit(0)
SSH = sshconnection.SSHConnection() with cls_cmd.getConnection(EPC.IPAddress) as cmd:
SSH.open(EPC.IPAddress, EPC.UserName, EPC.Password) d = f"{EPC.SourceCodePath}/scripts"
SSH.command(f'cd {EPC.SourceCodePath}', '\$', 5) cmd.run(f'rm -f {d}/ping.log.zip')
SSH.command('cd scripts', '\$', 5) cmd.run(f'cd {d} && zip ping.log.zip ping*.log')
SSH.command('rm -f ping.log.zip', '\$', 5) cmd.run(f'rm {d}/ping*.log')
SSH.command('zip ping.log.zip ping*.log', '\$', 60)
SSH.command('rm ping*.log', '\$', 5)
SSH.close()
def LogCollectIperf(self,EPC): def LogCollectIperf(self,EPC):
# Some pipelines are using "none" IP / Credentials # Some pipelines are using "none" IP / Credentials
# In that case, just forget about it # In that case, just forget about it
if EPC.IPAddress == 'none': if EPC.IPAddress == 'none':
sys.exit(0) sys.exit(0)
SSH = sshconnection.SSHConnection() with cls_cmd.getConnection(EPC.IPAddress) as cmd:
SSH.open(EPC.IPAddress, EPC.UserName, EPC.Password) d = f"{EPC.SourceCodePath}/scripts"
SSH.command(f'cd {EPC.SourceCodePath}', '\$', 5) cmd.run(f'rm -f {d}/iperf.log.zip')
SSH.command('cd scripts', '\$', 5) cmd.run(f'cd {d} && zip iperf.log.zip iperf*.log')
SSH.command('rm -f iperf.log.zip', '\$', 5) cmd.run(f'rm {d}/iperf*.log')
SSH.command('zip iperf.log.zip iperf*.log', '\$', 60)
SSH.command('rm iperf*.log', '\$', 5)
SSH.close()
def LogCollectOAIUE(self): def LogCollectOAIUE(self):
# Some pipelines are using "none" IP / Credentials # Some pipelines are using "none" IP / Credentials
# In that case, just forget about it # In that case, just forget about it
if self.UEIPAddress == 'none': if self.UEIPAddress == 'none':
sys.exit(0) sys.exit(0)
SSH = sshconnection.SSHConnection() with cls_cmd.getConnection(self.UEIPAddress) as cmd:
SSH.open(self.UEIPAddress, self.UEUserName, self.UEPassword) d = f'{self.UESourceCodePath}/cmake_targets'
SSH.command(f'cd {self.UESourceCodePath}', '\$', 5) cmd.run(f'echo {self.UEPassword} | sudo -S rm -f {d}/ue.log.zip')
SSH.command(f'cd cmake_targets', '\$', 5) cmd.run(f'cd {d} && echo {self.UEPassword} | sudo -S zip ue.log.zip ue*.log core* ue_*record.raw ue_*.pcap ue_*txt')
SSH.command(f'echo {self.UEPassword} | sudo -S rm -f ue.log.zip', '\$', 5) cmd.run(f'echo {self.UEPassword} | sudo -S rm {d}/ue*.log {d}/core* {d}/ue_*record.raw {d}/ue_*.pcap {d}/ue_*txt')
SSH.command(f'echo {self.UEPassword} | sudo -S zip ue.log.zip ue*.log core* ue_*record.raw ue_*.pcap ue_*txt', '\$', 60)
SSH.command(f'echo {self.UEPassword} | sudo -S rm ue*.log core* ue_*record.raw ue_*.pcap ue_*txt', '\$', 5)
SSH.close()
def ShowTestID(self): def ShowTestID(self):
logging.info(f'\u001B[1m----------------------------------------\u001B[0m') logging.info(f'\u001B[1m----------------------------------------\u001B[0m')
......
This diff is collapsed.
Active_gNBs = ( "cu-rfsim"); Active_gNBs = ( "cu-rfsim");
# Asn1_verbosity, choice in: none, info, annoying # Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity = "none"; Asn1_verbosity = "none";
Num_Threads_PUSCH = 8;
gNBs = gNBs =
( (
......
Active_gNBs = ( "gNB-Eurecom-CU"); Active_gNBs = ( "gNB-Eurecom-CU");
# Asn1_verbosity, choice in: none, info, annoying # Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity = "none"; Asn1_verbosity = "none";
Num_Threads_PUSCH = 8;
gNBs = gNBs =
( (
......
Active_gNBs = ( "gNB-OAI"); Active_gNBs = ( "gNB-OAI");
# Asn1_verbosity, choice in: none, info, annoying # Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity = "none"; Asn1_verbosity = "none";
Num_Threads_PUSCH = 8;
sa = 1;
gNBs = gNBs =
( (
......
Active_gNBs = ( "gNB-OAI"); Active_gNBs = ( "gNB-OAI");
# Asn1_verbosity, choice in: none, info, annoying # Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity = "none"; Asn1_verbosity = "none";
Num_Threads_PUSCH = 8;
sa = 1;
gNBs = gNBs =
( (
......
Active_gNBs = ( "gNB-OAI"); Active_gNBs = ( "gNB-OAI");
# Asn1_verbosity, choice in: none, info, annoying # Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity = "none"; Asn1_verbosity = "none";
sa = 1;
gNBs = gNBs =
( (
......
Active_gNBs = ( "gNB-OAI"); Active_gNBs = ( "gNB-OAI");
# Asn1_verbosity, choice in: none, info, annoying # Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity = "none"; Asn1_verbosity = "none";
sa = 1;
gNBs = gNBs =
( (
......
Active_gNBs = ( "du-rfsim");
# Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity = "none";
gNBs =
(
{
////////// Identification parameters:
gNB_ID = 0xe00;
gNB_DU_ID = 0xe00;
# cell_type = "CELL_MACRO_GNB";
gNB_name = "du-rfsim";
// Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 1;
plmn_list = ({ mcc = 208; mnc = 99; mnc_length = 2; snssaiList = ({ sst = 1, sd = 0xffffff }) });
nr_cellid = 12345678L;
////////// Physical parameters:
min_rxtxtime = 6;
servingCellConfigCommon = (
{
#spCellConfigCommon
physCellId = 0;
# downlinkConfigCommon
#frequencyInfoDL
# this is 3600 MHz + 43 PRBs@30kHz SCS (same as initial BWP)
absoluteFrequencySSB = 641280;
dl_frequencyBand = 78;
# this is 3600 MHz
dl_absoluteFrequencyPointA = 640008;
#scs-SpecificCarrierList
dl_offstToCarrier = 0;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
dl_subcarrierSpacing = 1;
dl_carrierBandwidth = 106;
#initialDownlinkBWP
#genericParameters
# this is RBstart=27,L=48 (275*(L-1))+RBstart
initialDLBWPlocationAndBandwidth = 28875; # 6366 12925 12956 28875 12952
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialDLBWPsubcarrierSpacing = 1;
#pdcch-ConfigCommon
initialDLBWPcontrolResourceSetZero = 12;
initialDLBWPsearchSpaceZero = 0;
#uplinkConfigCommon
#frequencyInfoUL
ul_frequencyBand = 78;
#scs-SpecificCarrierList
ul_offstToCarrier = 0;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
ul_subcarrierSpacing = 1;
ul_carrierBandwidth = 106;
pMax = 20;
#initialUplinkBWP
#genericParameters
initialULBWPlocationAndBandwidth = 28875;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialULBWPsubcarrierSpacing = 1;
#rach-ConfigCommon
#rach-ConfigGeneric
prach_ConfigurationIndex = 98;
#prach_msg1_FDM
#0 = one, 1=two, 2=four, 3=eight
prach_msg1_FDM = 0;
prach_msg1_FrequencyStart = 0;
zeroCorrelationZoneConfig = 13;
preambleReceivedTargetPower = -96;
#preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200)
preambleTransMax = 6;
#powerRampingStep
# 0=dB0,1=dB2,2=dB4,3=dB6
powerRampingStep = 1;
#ra_ReponseWindow
#1,2,4,8,10,20,40,80
ra_ResponseWindow = 4;
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 4;
#oneHalf (0..15) 4,8,12,16,...60,64
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 14;
#ra_ContentionResolutionTimer
#(0..7) 8,16,24,32,40,48,56,64
ra_ContentionResolutionTimer = 7;
rsrp_ThresholdSSB = 19;
#prach-RootSequenceIndex_PR
#1 = 839, 2 = 139
prach_RootSequenceIndex_PR = 2;
prach_RootSequenceIndex = 1;
# SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex
#
msg1_SubcarrierSpacing = 1,
# restrictedSetConfig
# 0=unrestricted, 1=restricted type A, 2=restricted type B
restrictedSetConfig = 0,
msg3_DeltaPreamble = 1;
p0_NominalWithGrant =-90;
# pucch-ConfigCommon setup :
# pucchGroupHopping
# 0 = neither, 1= group hopping, 2=sequence hopping
pucchGroupHopping = 0;
hoppingId = 40;
p0_nominal = -90;
ssb_PositionsInBurst_Bitmap = 1;
# ssb_periodicityServingCell
# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1
ssb_periodicityServingCell = 2;
# dmrs_TypeA_position
# 0 = pos2, 1 = pos3
dmrs_TypeA_Position = 0;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
subcarrierSpacing = 1;
#tdd-UL-DL-ConfigurationCommon
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
referenceSubcarrierSpacing = 1;
# pattern1
# dl_UL_TransmissionPeriodicity
# 0=ms0p5, 1=ms0p625, 2=ms1, 3=ms1p25, 4=ms2, 5=ms2p5, 6=ms5, 7=ms10
dl_UL_TransmissionPeriodicity = 6;
nrofDownlinkSlots = 7;
nrofDownlinkSymbols = 6;
nrofUplinkSlots = 2;
nrofUplinkSymbols = 4;
ssPBCH_BlockPower = -25;
}
);
# ------- SCTP definitions
SCTP :
{
# Number of streams to use in input/output
SCTP_INSTREAMS = 2;
SCTP_OUTSTREAMS = 2;
};
}
);
MACRLCs = (
{
num_cc = 1;
tr_s_preference = "local_L1";
tr_n_preference = "f1";
local_n_address = "192.168.72.142";
remote_n_address = "192.168.72.140";
local_n_portc = 500;
local_n_portd = 2152;
remote_n_portc = 501;
remote_n_portd = 2152;
pusch_TargetSNRx10 = 200;
pucch_TargetSNRx10 = 200;
}
);
L1s = (
{
num_cc = 1;
tr_n_preference = "local_mac";
prach_dtx_threshold = 200;
pucch0_dtx_threshold = 150;
ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0
}
);
RUs = (
{
local_rf = "yes"
nb_tx = 1
nb_rx = 1
att_tx = 0
att_rx = 0;
bands = [78];
max_pdschReferenceSignalPower = -27;
max_rxgain = 114;
eNB_instances = [0];
clock_src = "internal";
}
);
rfsimulator: {
serveraddr = "server";
serverport = 4043;
options = (); #("saviq"); or/and "chanmod"
modelname = "AWGN";
IQfile = "/tmp/rfsimulator.iqs"
}
log_config :
{
global_log_level = "info";
hw_log_level = "info";
nr_phy_log_level = "info";
nr_mac_log_level = "info";
rlc_log_level = "info";
pdcp_log_level = "info";
rrc_log_level = "info";
f1ap_log_level = "info";
ngap_log_level = "debug";
};
...@@ -2,7 +2,6 @@ Active_gNBs = ( "gNB-OAI"); ...@@ -2,7 +2,6 @@ Active_gNBs = ( "gNB-OAI");
# Asn1_verbosity, choice in: none, info, annoying # Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity = "none"; Asn1_verbosity = "none";
sa = 1;
nfapi = "AERIAL"; nfapi = "AERIAL";
gNBs = gNBs =
......
...@@ -2,8 +2,6 @@ Active_gNBs = ( "gNB-OAI"); ...@@ -2,8 +2,6 @@ Active_gNBs = ( "gNB-OAI");
# Asn1_verbosity, choice in: none, info, annoying # Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity = "none"; Asn1_verbosity = "none";
sa = 1;
gNBs = gNBs =
( (
{ {
......
...@@ -2,7 +2,6 @@ Active_gNBs = ( "gNB-OAI"); ...@@ -2,7 +2,6 @@ Active_gNBs = ( "gNB-OAI");
# Asn1_verbosity, choice in: none, info, annoying # Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity = "none"; Asn1_verbosity = "none";
sa = 1;
usrp-tx-thread-config = 1; usrp-tx-thread-config = 1;
tune-offset = 30720000; tune-offset = 30720000;
...@@ -21,7 +20,6 @@ gNBs = ...@@ -21,7 +20,6 @@ gNBs =
////////// Physical parameters: ////////// Physical parameters:
ssb_SubcarrierOffset = 0;
pdsch_AntennaPorts_XP = 2; pdsch_AntennaPorts_XP = 2;
pusch_AntennaPorts = 2; pusch_AntennaPorts = 2;
do_CSIRS = 1; do_CSIRS = 1;
...@@ -35,9 +33,9 @@ gNBs = ...@@ -35,9 +33,9 @@ gNBs =
# downlinkConfigCommon # downlinkConfigCommon
#frequencyInfoDL #frequencyInfoDL
# this is 3300.60 MHz + 81*12*30e-3 MHz = 3329.76 # this is 4100.16 MHz
absoluteFrequencySSB = 673344; absoluteFrequencySSB = 673344;
# this is 3300.60 MHz # this is 4071 MHz
dl_absoluteFrequencyPointA = 671400; dl_absoluteFrequencyPointA = 671400;
dl_frequencyBand = 77; dl_frequencyBand = 77;
#scs-SpecificCarrierList #scs-SpecificCarrierList
......
...@@ -2,7 +2,6 @@ Active_gNBs = ( "gNB-OAI"); ...@@ -2,7 +2,6 @@ Active_gNBs = ( "gNB-OAI");
# Asn1_verbosity, choice in: none, info, annoying # Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity = "none"; Asn1_verbosity = "none";
sa = 1;
usrp-tx-thread-config = 1; usrp-tx-thread-config = 1;
gNBs = ( gNBs = (
...@@ -32,10 +31,10 @@ gNBs = ( ...@@ -32,10 +31,10 @@ gNBs = (
# downlinkConfigCommon # downlinkConfigCommon
# frequencyInfoDL # frequencyInfoDL
# this is 3900.60 MHz + (134 PRBs + 4 SCs)@30kHz SCS (GSCN: 8158) # this is 4100.16 MHz
absoluteFrequencySSB = 673344; absoluteFrequencySSB = 673344;
dl_frequencyBand = 77; dl_frequencyBand = 77;
# this is 3900.60 MHz # this is 4051.02 MHz
dl_absoluteFrequencyPointA = 670068; dl_absoluteFrequencyPointA = 670068;
# scs-SpecificCarrierList # scs-SpecificCarrierList
......
Active_gNBs = ( "gNB-OAI"); Active_gNBs = ( "gNB-OAI");
# Asn1_verbosity, choice in: none, info, annoying # Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity = "none"; Asn1_verbosity = "none";
Num_Threads_PUSCH = 8;
gNBs = gNBs =
( (
......
...@@ -39,14 +39,12 @@ import constants as CONST ...@@ -39,14 +39,12 @@ import constants as CONST
import cls_oaicitest #main class for OAI CI test framework import cls_oaicitest #main class for OAI CI test framework
import cls_physim #class PhySim for physical simulators build and test
import cls_containerize #class Containerize for all container-based operations on RAN/UE objects import cls_containerize #class Containerize for all container-based operations on RAN/UE objects
import cls_static_code_analysis #class for static code analysis import cls_static_code_analysis #class for static code analysis
import cls_physim1 #class PhySim for physical simulators deploy and run import cls_physim1 #class PhySim for physical simulators deploy and run
import cls_cluster # class for building/deploying on cluster import cls_cluster # class for building/deploying on cluster
import cls_native # class for all native/source-based operations import cls_native # class for all native/source-based operations
import sshconnection
import epc import epc
import ran import ran
import cls_oai_html import cls_oai_html
...@@ -87,7 +85,6 @@ def CheckClassValidity(xml_class_list,action,id): ...@@ -87,7 +85,6 @@ def CheckClassValidity(xml_class_list,action,id):
resp=True resp=True
return resp return resp
#assigning parameters to object instance attributes (even if the attributes do not exist !!) #assigning parameters to object instance attributes (even if the attributes do not exist !!)
def AssignParams(params_dict): def AssignParams(params_dict):
...@@ -95,12 +92,8 @@ def AssignParams(params_dict): ...@@ -95,12 +92,8 @@ def AssignParams(params_dict):
setattr(CiTestObj, key, value) setattr(CiTestObj, key, value)
setattr(RAN, key, value) setattr(RAN, key, value)
setattr(HTML, key, value) setattr(HTML, key, value)
setattr(ldpc, key, value)
def ExecuteActionWithParam(action): def ExecuteActionWithParam(action):
global SSH
global EPC global EPC
global RAN global RAN
global HTML global HTML
...@@ -108,7 +101,6 @@ def ExecuteActionWithParam(action): ...@@ -108,7 +101,6 @@ def ExecuteActionWithParam(action):
global SCA global SCA
global PHYSIM global PHYSIM
global CLUSTER global CLUSTER
global ldpc
if action == 'Build_eNB' or action == 'Build_Image' or action == 'Build_Proxy' or action == "Build_Cluster_Image" or action == "Build_Run_Tests": if action == 'Build_eNB' or action == 'Build_Image' or action == 'Build_Proxy' or action == "Build_Cluster_Image" or action == "Build_Run_Tests":
RAN.Build_eNB_args=test.findtext('Build_eNB_args') RAN.Build_eNB_args=test.findtext('Build_eNB_args')
CONTAINERS.imageKind=test.findtext('kind') CONTAINERS.imageKind=test.findtext('kind')
...@@ -289,18 +281,6 @@ def ExecuteActionWithParam(action): ...@@ -289,18 +281,6 @@ def ExecuteActionWithParam(action):
st = test.findtext('idle_sleep_time_in_sec') or "5" st = test.findtext('idle_sleep_time_in_sec') or "5"
success = cls_oaicitest.IdleSleep(HTML, int(st)) success = cls_oaicitest.IdleSleep(HTML, int(st))
elif action == 'Build_PhySim':
ldpc.buildargs = test.findtext('physim_build_args')
forced_workspace_cleanup = test.findtext('forced_workspace_cleanup')
if (forced_workspace_cleanup is None):
ldpc.forced_workspace_cleanup=False
else:
if re.match('true', forced_workspace_cleanup, re.IGNORECASE):
ldpc.forced_workspace_cleanup=True
else:
ldpc.forced_workspace_cleanup=False
success = ldpc.Build_PhySim(HTML,CONST)
elif action == 'Deploy_Run_PhySim': elif action == 'Deploy_Run_PhySim':
success = PHYSIM.Deploy_PhySim(HTML) success = PHYSIM.Deploy_PhySim(HTML)
...@@ -377,16 +357,11 @@ def ExecuteActionWithParam(action): ...@@ -377,16 +357,11 @@ def ExecuteActionWithParam(action):
elif action == 'Create_Workspace': elif action == 'Create_Workspace':
success = CONTAINERS.Create_Workspace(HTML) success = CONTAINERS.Create_Workspace(HTML)
elif action == 'Run_CUDATest' or action == 'Run_NRulsimTest' or action == 'Run_T2Test': elif action == 'Run_Physim':
ldpc.runargs = test.findtext('physim_run_args') physim_options = test.findtext('physim_run_args')
ldpc.runsim = test.findtext('physim_run') physim_test = test.findtext('physim_test')
ldpc.timethrs = test.findtext('physim_time_threshold') physim_threshold = test.findtext('physim_time_threshold') or 'inf'
if action == 'Run_CUDATest': success = cls_native.Native.Run_Physim(HTML, RAN.eNBIPAddress, RAN.eNBSourceCodePath, physim_options, physim_test, physim_threshold)
success = ldpc.Run_CUDATest(HTML,CONST,id)
elif action == 'Run_NRulsimTest':
success = ldpc.Run_NRulsimTest(HTML,CONST,id)
elif action == 'Run_T2Test':
success = ldpc.Run_T2Test(HTML,CONST,id)
elif action == 'LicenceAndFormattingCheck': elif action == 'LicenceAndFormattingCheck':
success = SCA.LicenceAndFormattingCheck(HTML) success = SCA.LicenceAndFormattingCheck(HTML)
...@@ -484,7 +459,6 @@ mode = '' ...@@ -484,7 +459,6 @@ mode = ''
CiTestObj = cls_oaicitest.OaiCiTest() CiTestObj = cls_oaicitest.OaiCiTest()
SSH = sshconnection.SSHConnection()
EPC = epc.EPCManagement() EPC = epc.EPCManagement()
RAN = ran.RANManagement() RAN = ran.RANManagement()
HTML = cls_oai_html.HTMLManagement() HTML = cls_oai_html.HTMLManagement()
...@@ -493,15 +467,12 @@ SCA = cls_static_code_analysis.StaticCodeAnalysis() ...@@ -493,15 +467,12 @@ SCA = cls_static_code_analysis.StaticCodeAnalysis()
PHYSIM = cls_physim1.PhySim() PHYSIM = cls_physim1.PhySim()
CLUSTER = cls_cluster.Cluster() CLUSTER = cls_cluster.Cluster()
ldpc=cls_physim.PhySim() #create an instance for LDPC test using GPU or CPU build
#----------------------------------------------------------- #-----------------------------------------------------------
# Parsing Command Line Arguments # Parsing Command Line Arguments
#----------------------------------------------------------- #-----------------------------------------------------------
import args_parse import args_parse
py_param_file_present, py_params, mode = args_parse.ArgsParse(sys.argv,CiTestObj,RAN,HTML,EPC,ldpc,CONTAINERS,HELP,SCA,PHYSIM,CLUSTER) py_param_file_present, py_params, mode = args_parse.ArgsParse(sys.argv,CiTestObj,RAN,HTML,EPC,CONTAINERS,HELP,SCA,PHYSIM,CLUSTER)
...@@ -696,26 +667,6 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE) or re.match('^TestUE$', mode, re ...@@ -696,26 +667,6 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE) or re.match('^TestUE$', mode, re
HTML.CreateHtmlTabHeader() HTML.CreateHtmlTabHeader()
# On CI bench w/ containers, we need to validate if IP routes are set
if EPC.IPAddress == '172.21.16.136':
CONTAINERS.CheckAndAddRoute('porcepix', EPC.IPAddress, EPC.UserName, EPC.Password)
if EPC.IPAddress == '172.21.16.137':
CONTAINERS.CheckAndAddRoute('nepes', EPC.IPAddress, EPC.UserName, EPC.Password)
if CONTAINERS.eNBIPAddress == '172.21.16.127':
CONTAINERS.CheckAndAddRoute('asterix', CONTAINERS.eNBIPAddress, CONTAINERS.eNBUserName, CONTAINERS.eNBPassword)
if CONTAINERS.eNB1IPAddress == '172.21.16.127':
CONTAINERS.CheckAndAddRoute('asterix', CONTAINERS.eNB1IPAddress, CONTAINERS.eNB1UserName, CONTAINERS.eNB1Password)
if CONTAINERS.eNBIPAddress == '172.21.16.128':
CONTAINERS.CheckAndAddRoute('obelix', CONTAINERS.eNBIPAddress, CONTAINERS.eNBUserName, CONTAINERS.eNBPassword)
if CONTAINERS.eNB1IPAddress == '172.21.16.128':
CONTAINERS.CheckAndAddRoute('obelix', CONTAINERS.eNB1IPAddress, CONTAINERS.eNB1UserName, CONTAINERS.eNB1Password)
if CONTAINERS.eNBIPAddress == '172.21.16.109' or CONTAINERS.eNBIPAddress == 'ofqot':
CONTAINERS.CheckAndAddRoute('ofqot', CONTAINERS.eNBIPAddress, CONTAINERS.eNBUserName, CONTAINERS.eNBPassword)
if CONTAINERS.eNBIPAddress == '172.21.16.137':
CONTAINERS.CheckAndAddRoute('nepes', CONTAINERS.eNBIPAddress, CONTAINERS.eNBUserName, CONTAINERS.eNBPassword)
if CONTAINERS.eNB1IPAddress == '172.21.16.137':
CONTAINERS.CheckAndAddRoute('nepes', CONTAINERS.eNB1IPAddress, CONTAINERS.eNB1UserName, CONTAINERS.eNB1Password)
task_set_succeeded = True task_set_succeeded = True
HTML.startTime=int(round(time.time() * 1000)) HTML.startTime=int(round(time.time() * 1000))
......
...@@ -15,7 +15,7 @@ ref=$3 ...@@ -15,7 +15,7 @@ ref=$3
merge=$4 merge=$4
rm -rf ${dir} rm -rf ${dir}
git clone --filter=blob:none -n -b develop ${repo} ${dir} git clone --filter=blob:none -n ${repo} ${dir}
cd ${dir} cd ${dir}
git config user.email "jenkins@openairinterface.org" git config user.email "jenkins@openairinterface.org"
git config user.name "OAI Jenkins" git config user.name "OAI Jenkins"
......
...@@ -3,18 +3,28 @@ scripts. ...@@ -3,18 +3,28 @@ scripts.
# Unit test # Unit test
There are some unit tests. From the parent directory, i.e., `ci-scripts/`, This repository contains unit tests. To run them, switch to the parent
start with directory, i.e., `ci-scripts/`, and run
python3 -m unittest tests/*.py
To run individual unit tests, start them like so:
python tests/build.py -v
python tests/cmd.py -v
python tests/deployment.py -v python tests/deployment.py -v
python tests/ping-iperf.py -v
python tests/iperf-analysis.py -v python tests/iperf-analysis.py -v
python tests/ping-iperf.py -v
It will indicate if all tests passed. It assumes that these images are present: The logs will indicate if all tests passed. `tests/deployment.py` requires
these images to be present:
- `oai-ci/oai-nr-ue:develop-12345678` - `oai-ci/oai-nr-ue:develop-12345678`
- `oai-ci/oai-gnb:develop-12345678` - `oai-ci/oai-gnb:develop-12345678`
It will try to download `oaisoftwarealliance/oai-{gnb,nr-ue}:develop`
automatically and retag the images.
# test-runner test # test-runner test
This is not a true test, because the results need to be manually inspected. To This is not a true test, because the results need to be manually inspected. To
......
import sys
import logging
logging.basicConfig(
level=logging.DEBUG,
stream=sys.stdout,
format="[%(asctime)s] %(levelname)8s: %(message)s"
)
import unittest
import tempfile
sys.path.append('./') # to find OAI imports below
import cls_oai_html
import cls_containerize
import cls_cmd
class TestBuild(unittest.TestCase):
def setUp(self):
self.html = cls_oai_html.HTMLManagement()
self.html.testCase_id = "000000"
self.cont = cls_containerize.Containerize()
self.cont.eNB_serverId[0] = '0'
self.cont.eNBIPAddress = 'localhost'
self.cont.eNBUserName = None
self.cont.eNBPassword = None
self._d = tempfile.mkdtemp()
logging.warning(f"temporary directory: {self._d}")
self.cont.eNBSourceCodePath = self._d
def tearDown(self):
logging.warning(f"removing directory contents")
with cls_cmd.getConnection(None) as cmd:
cmd.run(f"rm -rf {self._d}")
def test_build_proxy(self):
self.cont.proxyCommit = "b64d9bce986b38ca59e8582864ade3fcdd05c0dc"
success = self.cont.BuildProxy(self.html)
self.assertTrue(success)
if __name__ == '__main__':
unittest.main()
...@@ -15,9 +15,24 @@ import cls_oai_html ...@@ -15,9 +15,24 @@ import cls_oai_html
import cls_oaicitest import cls_oaicitest
import cls_containerize import cls_containerize
import ran import ran
import cls_cmd
class TestDeploymentMethods(unittest.TestCase): class TestDeploymentMethods(unittest.TestCase):
def _pull_image(self, cmd, image):
ret = cmd.run(f"docker inspect oai-ci/{image}:develop-12345678")
if ret.returncode == 0: # exists
return
ret = cmd.run(f"docker pull oaisoftwarealliance/{image}:develop")
self.assertEqual(ret.returncode, 0)
ret = cmd.run(f"docker tag oaisoftwarealliance/{image}:develop oai-ci/{image}:develop-12345678")
self.assertEqual(ret.returncode, 0)
ret = cmd.run(f"docker rmi oaisoftwarealliance/{image}:develop")
self.assertEqual(ret.returncode, 0)
def setUp(self): def setUp(self):
with cls_cmd.getConnection("localhost") as cmd:
self._pull_image(cmd, "oai-gnb")
self._pull_image(cmd, "oai-nr-ue")
self.html = cls_oai_html.HTMLManagement() self.html = cls_oai_html.HTMLManagement()
self.html.testCaseId = "000000" self.html.testCaseId = "000000"
self.ci = cls_oaicitest.OaiCiTest() self.ci = cls_oaicitest.OaiCiTest()
......
- Build_Proxy - Build_Proxy
- Build_Cluster_Image - Build_Cluster_Image
- Pull_Cluster_Image - Pull_Cluster_Image
- Build_PhySim - Run_Physim
- Run_CUDATest
- Run_T2Test
- Run_NRulsimTest
- Build_eNB - Build_eNB
- Initialize_eNB - Initialize_eNB
- Terminate_eNB - Terminate_eNB
......
<!--
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
-->
<testCaseList>
<htmlTabRef>l2sim-5gnr-tdd</htmlTabRef>
<htmlTabName>Testing 5G NR L2 sim - TDD gNB</htmlTabName>
<htmlTabIcon>wrench</htmlTabIcon>
<TestCaseRequestedList>
111111
800813
000000
000001
000002
000003
000004
020001
020002
100001
222222
</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
<testCase id="111111">
<class>Pull_Local_Registry</class>
<desc>Pull Images from Local Registry</desc>
<test_svr_id>0</test_svr_id>
<images_to_pull>oai-gnb-asan oai-nr-ue-asan</images_to_pull>
</testCase>
<testCase id="800813">
<class>Create_Workspace</class>
<desc>Create new Workspace</desc>
<eNB_instance>0</eNB_instance>
<eNB_serverId>0</eNB_serverId>
</testCase>
<testCase id="000000">
<class>Deploy_Object</class>
<desc>Deploy MySql Database</desc>
<yaml_path>ci-scripts/yaml_files/5g_l2sim_tdd</yaml_path>
<services>mysql</services>
<eNB_instance>0</eNB_instance>
<eNB_serverId>0</eNB_serverId>
</testCase>
<testCase id="000001">
<class>Deploy_Object</class>
<desc>Deploy OAI 5G CoreNetwork</desc>
<yaml_path>ci-scripts/yaml_files/5g_l2sim_tdd</yaml_path>
<services>oai-amf oai-smf oai-upf oai-ext-dn</services>
<eNB_instance>0</eNB_instance>
<eNB_serverId>0</eNB_serverId>
</testCase>
<testCase id="000002">
<class>Deploy_Object</class>
<desc>Deploy OAI 5G gNB L2 sim SA</desc>
<yaml_path>ci-scripts/yaml_files/5g_l2sim_tdd</yaml_path>
<services>oai-gnb</services>
<eNB_instance>0</eNB_instance>
<eNB_serverId>0</eNB_serverId>
</testCase>
<testCase id="000003">
<class>Deploy_Object</class>
<desc>Deploy OAI 5G NR-UE L2 sim SA and Proxy</desc>
<yaml_path>ci-scripts/yaml_files/5g_l2sim_tdd</yaml_path>
<services>proxy oai-nr-ue0</services>
<eNB_instance>0</eNB_instance>
<eNB_serverId>0</eNB_serverId>
</testCase>
<testCase id="000004">
<class>Attach_UE</class>
<desc>Attach OAI UE</desc>
<id>l2sim5g_ue</id>
<nodes>localhost</nodes>
</testCase>
<testCase id="020001">
<class>Ping</class>
<desc>Ping ext-dn from NR-UE</desc>
<id>l2sim5g_ue</id>
<nodes>localhost</nodes>
<ping_args> -c 20 192.168.72.135</ping_args>
<ping_packetloss_threshold>5</ping_packetloss_threshold>
</testCase>
<testCase id="020002">
<class>Ping</class>
<desc>Ping NR-UE from ext-dn</desc>
<id>l2sim5g_ext_dn</id>
<nodes>localhost</nodes>
<ping_args>-c 20 12.1.1.2</ping_args>
<ping_packetloss_threshold>5</ping_packetloss_threshold>
</testCase>
<testCase id="100001">
<class>Undeploy_Object</class>
<always_exec>true</always_exec>
<desc>Undeploy all OAI 5G stack</desc>
<yaml_path>ci-scripts/yaml_files/5g_l2sim_tdd</yaml_path>
<d_retx_th>20,50,100,100</d_retx_th>
<u_retx_th>0,0,0,0</u_retx_th>
<eNB_instance>0</eNB_instance>
<eNB_serverId>0</eNB_serverId>
</testCase>
<testCase id="222222">
<class>Clean_Test_Server_Images</class>
<always_exec>true</always_exec>
<desc>Clean Test Images on Test Server</desc>
<test_svr_id>0</test_svr_id>
</testCase>
</testCaseList>
<!--
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
-->
<testCaseList>
<htmlTabRef>rfsim-5gnr-f1-accelleran</htmlTabRef>
<htmlTabName>F1 DU Interop Accelleran CU</htmlTabName>
<htmlTabIcon>wrench</htmlTabIcon>
<TestCaseRequestedList>
111111
800813
000020
000021
020021
100021
100022
222222
</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
<testCase id="111111">
<class>Pull_Local_Registry</class>
<desc>Pull Images from Local Registry</desc>
<test_svr_id>0</test_svr_id>
<images_to_pull>oai-gnb oai-nr-ue</images_to_pull>
</testCase>
<testCase id="800813">
<class>Create_Workspace</class>
<desc>Create new Workspace</desc>
<eNB_instance>0</eNB_instance>
<eNB_serverId>0</eNB_serverId>
</testCase>
<testCase id="000020">
<class>Deploy_Object</class>
<desc>Deploy OAI-DU+nrUE</desc>
<yaml_path>ci-scripts/yaml_files/5g_rfsimulator_accelleran</yaml_path>
<services>oai-du oai-nr-ue</services>
<eNB_instance>0</eNB_instance>
<eNB_serverId>0</eNB_serverId>
</testCase>
<testCase id="000021">
<class>Attach_UE</class>
<desc>Attach OAI UE (Wait for IP)</desc>
<id>rfsim5g_ue</id>
<nodes>ofqot</nodes>
</testCase>
<testCase id="020021">
<class>Ping</class>
<desc>Test Connectivity (ping)</desc>
<id>rfsim5g_ue</id>
<nodes>ofqot</nodes>
<ping_args>-c 20 12.1.1.1</ping_args>
<ping_packetloss_threshold>0</ping_packetloss_threshold>
</testCase>
<testCase id="100022">
<class>Undeploy_Object</class>
<always_exec>true</always_exec>
<desc>Undeploy all OAI 5G stack</desc>
<yaml_path>ci-scripts/yaml_files/5g_rfsimulator_accelleran</yaml_path>
<eNB_instance>0</eNB_instance>
<eNB_serverId>0</eNB_serverId>
</testCase>
<testCase id="222222">
<class>Clean_Test_Server_Images</class>
<always_exec>true</always_exec>
<desc>Clean Test Images on Test Server</desc>
<test_svr_id>0</test_svr_id>
</testCase>
</testCaseList>
...@@ -25,17 +25,10 @@ ...@@ -25,17 +25,10 @@
<htmlTabName>Build L2sim proxy image</htmlTabName> <htmlTabName>Build L2sim proxy image</htmlTabName>
<htmlTabIcon>wrench</htmlTabIcon> <htmlTabIcon>wrench</htmlTabIcon>
<TestCaseRequestedList> <TestCaseRequestedList>
100001
000001 000001
</TestCaseRequestedList> </TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList> <TestCaseExclusionList></TestCaseExclusionList>
<testCase id="100001">
<class>Create_Workspace</class>
<desc>Create new Workspace</desc>
<eNB_instance>1</eNB_instance>
<eNB_serverId>1</eNB_serverId>
</testCase>
<testCase id="000001"> <testCase id="000001">
<class>Build_Proxy</class> <class>Build_Proxy</class>
<desc>Build L2sim Proxy Image</desc> <desc>Build L2sim Proxy Image</desc>
......
<!--
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
-->
<testCaseList>
<htmlTabRef>TEST-SA-FR1-N310-4x4-60MHz</htmlTabRef>
<htmlTabName>60 MHz 4x4 TDD SA</htmlTabName>
<htmlTabIcon>tasks</htmlTabIcon>
<TestCaseRequestedList>
100000
111111
010010
800813
030101
010001
050001
071000
071001
070002
010010
000001
030201
200000
333333
</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
<testCase id="111111">
<class>Pull_Cluster_Image</class>
<desc>Pull Images from Cluster</desc>
<images_to_pull>oai-gnb</images_to_pull>
<test_svr_id>matix</test_svr_id>
</testCase>
<testCase id="100000">
<class>Custom_Command</class>
<desc>Disable Sleep States</desc>
<node>matix</node>
<command>sudo cpupower idle-set -D 0</command>
</testCase>
<testCase id="200000">
<class>Custom_Command</class>
<always_exec>true</always_exec>
<desc>Enable Sleep States</desc>
<node>matix</node>
<command>sudo cpupower idle-set -E</command>
</testCase>
<testCase id="010001">
<class>Attach_UE</class>
<desc>Attach UE</desc>
<id>up2</id>
</testCase>
<testCase id="010010">
<class>Detach_UE</class>
<always_exec>true</always_exec>
<desc>Detach UE</desc>
<id>up2</id>
</testCase>
<testCase id="800813">
<class>Create_Workspace</class>
<desc>Create new Workspace</desc>
<eNB_instance>0</eNB_instance>
<eNB_serverId>0</eNB_serverId>
</testCase>
<testCase id="030101">
<class>Deploy_Object</class>
<desc>Deploy gNB (TDD/Band77/60MHz/N310) in a container</desc>
<yaml_path>ci-scripts/yaml_files/5g_sa_n310_4x4_60MHz</yaml_path>
<eNB_instance>0</eNB_instance>
<eNB_serverId>0</eNB_serverId>
</testCase>
<testCase id="000001">
<class>IdleSleep</class>
<desc>Sleep</desc>
<idle_sleep_time_in_sec>5</idle_sleep_time_in_sec>
</testCase>
<testCase id="000002">
<class>IdleSleep</class>
<desc>Sleep</desc>
<idle_sleep_time_in_sec>10</idle_sleep_time_in_sec>
</testCase>
<testCase id="050001">
<class>Ping</class>
<desc>Ping: 100pings in 20sec</desc>
<id>up2</id>
<ping_args>-c 100 -i 0.2 %cn_ip%</ping_args>
<ping_packetloss_threshold>1</ping_packetloss_threshold>
<ping_rttavg_threshold>15</ping_rttavg_threshold>
</testCase>
<testCase id="071000">
<class>Iperf</class>
<desc>iperf (DL/480Mbps/UDP)(30 sec)(single-ue profile)</desc>
<iperf_args>-u -b 480M -t 30 -R</iperf_args>
<svr_id>matix-cn5g</svr_id>
<id>up2</id>
<iperf_packetloss_threshold>25</iperf_packetloss_threshold>
<iperf_bitrate_threshold>80</iperf_bitrate_threshold>
</testCase>
<testCase id="071001">
<class>Iperf</class>
<desc>iperf (UL/120Mbps/UDP)(30 sec)(single-ue profile)</desc>
<iperf_args>-u -b 120M -t 30</iperf_args>
<svr_id>matix-cn5g</svr_id>
<id>up2</id>
<iperf_packetloss_threshold>10</iperf_packetloss_threshold>
<iperf_bitrate_threshold>70</iperf_bitrate_threshold>
</testCase>
<testCase id="070002">
<class>Iperf</class>
<desc>iperf (BIDIR TCP)(30 sec)(single-ue profile)</desc>
<iperf_args>-t 30 --bidir</iperf_args>
<svr_id>matix-cn5g</svr_id>
<id>up2</id>
</testCase>
<testCase id="030201">
<class>Undeploy_Object</class>
<always_exec>true</always_exec>
<desc>Undeploy gNB</desc>
<yaml_path>ci-scripts/yaml_files/5g_sa_n310_4x4_60MHz</yaml_path>
<eNB_instance>0</eNB_instance>
<eNB_serverId>0</eNB_serverId>
<services>oai-gnb</services>
<d_retx_th>10,100,100,100</d_retx_th>
<u_retx_th>10,100,100,100</u_retx_th>
</testCase>
<testCase id="333333">
<class>Clean_Test_Server_Images</class>
<always_exec>true</always_exec>
<desc>Clean Test Images on Test Server</desc>
<test_svr_id>0</test_svr_id>
</testCase>
</testCaseList>
...@@ -114,7 +114,7 @@ ...@@ -114,7 +114,7 @@
<testCase id="040000"> <testCase id="040000">
<class>Initialize_eNB</class> <class>Initialize_eNB</class>
<desc>Initialize gNB</desc> <desc>Initialize gNB</desc>
<Initialize_eNB_args>-O ci-scripts/conf_files/gnb.nsa.band78.106prb.usrpn310.2x2.conf -q --usrp-tx-thread-config 1 --T_stdout 2 --log_config.global_log_options level,nocolor,time,line_num,function</Initialize_eNB_args> <Initialize_eNB_args>-O ci-scripts/conf_files/gnb.nsa.band78.106prb.usrpn310.2x2.conf --nsa -q --usrp-tx-thread-config 1 --T_stdout 2 --log_config.global_log_options level,nocolor,time,line_num,function</Initialize_eNB_args>
<eNB_instance>1</eNB_instance> <eNB_instance>1</eNB_instance>
<eNB_serverId>1</eNB_serverId> <eNB_serverId>1</eNB_serverId>
<air_interface>nr</air_interface> <air_interface>nr</air_interface>
......
...@@ -118,7 +118,7 @@ ...@@ -118,7 +118,7 @@
<testCase id="041000"> <testCase id="041000">
<class>Initialize_eNB</class> <class>Initialize_eNB</class>
<desc>Initialize gNB</desc> <desc>Initialize gNB</desc>
<Initialize_eNB_args>-O ci-scripts/conf_files/gnb.nsa.band78.106prb.usrpn310.2x2.conf -q --usrp-tx-thread-config 1 --log_config.global_log_options level,nocolor,time,line_num,function</Initialize_eNB_args> <Initialize_eNB_args>-O ci-scripts/conf_files/gnb.nsa.band78.106prb.usrpn310.2x2.conf --nsa -q --usrp-tx-thread-config 1 --log_config.global_log_options level,nocolor,time,line_num,function</Initialize_eNB_args>
<eNB_instance>1</eNB_instance> <eNB_instance>1</eNB_instance>
<eNB_serverId>1</eNB_serverId> <eNB_serverId>1</eNB_serverId>
<air_interface>nr</air_interface> <air_interface>nr</air_interface>
......
...@@ -29,122 +29,162 @@ ...@@ -29,122 +29,162 @@
<TestCaseExclusionList></TestCaseExclusionList> <TestCaseExclusionList></TestCaseExclusionList>
<testCase id="000002"> <testCase id="000002">
<class>Run_CUDATest</class> <class>Run_Physim</class>
<desc>Run LDPC Test with CPU</desc> <desc>Run LDPC Test with CPU</desc>
<always_exec>true</always_exec>
<physim_test>ldpctest</physim_test>
<physim_run_args>-l 3872 -s10 -n100</physim_run_args> <physim_run_args>-l 3872 -s10 -n100</physim_run_args>
</testCase> </testCase>
<testCase id="000003"> <testCase id="000003">
<class>Run_CUDATest</class> <class>Run_Physim</class>
<desc>Run LDPC Test with GPU</desc> <desc>Run LDPC Test with GPU</desc>
<always_exec>true</always_exec>
<physim_test>ldpctest</physim_test>
<physim_run_args>-l 3872 -s10 -n100 -G 1</physim_run_args> <physim_run_args>-l 3872 -s10 -n100 -G 1</physim_run_args>
</testCase> </testCase>
<testCase id="000004"> <testCase id="000004">
<class>Run_CUDATest</class> <class>Run_Physim</class>
<desc>Run LDPC Test with CPU</desc> <desc>Run LDPC Test with CPU</desc>
<always_exec>true</always_exec>
<physim_test>ldpctest</physim_test>
<physim_run_args>-l 4224 -s10 -n100</physim_run_args> <physim_run_args>-l 4224 -s10 -n100</physim_run_args>
</testCase> </testCase>
<testCase id="000005"> <testCase id="000005">
<class>Run_CUDATest</class> <class>Run_Physim</class>
<desc>Run LDPC Test with GPU</desc> <desc>Run LDPC Test with GPU</desc>
<always_exec>true</always_exec>
<physim_test>ldpctest</physim_test>
<physim_run_args>-l 4224 -s10 -n100 -G 1</physim_run_args> <physim_run_args>-l 4224 -s10 -n100 -G 1</physim_run_args>
</testCase> </testCase>
<testCase id="000006"> <testCase id="000006">
<class>Run_CUDATest</class> <class>Run_Physim</class>
<desc>Run LDPC Test with CPU</desc> <desc>Run LDPC Test with CPU</desc>
<always_exec>true</always_exec>
<physim_test>ldpctest</physim_test>
<physim_run_args>-l 4576 -s10 -n100</physim_run_args> <physim_run_args>-l 4576 -s10 -n100</physim_run_args>
</testCase> </testCase>
<testCase id="000007"> <testCase id="000007">
<class>Run_CUDATest</class> <class>Run_Physim</class>
<desc>Run LDPC Test with GPU</desc> <desc>Run LDPC Test with GPU</desc>
<always_exec>true</always_exec>
<physim_test>ldpctest</physim_test>
<physim_run_args>-l 4576 -s10 -n100 -G 1</physim_run_args> <physim_run_args>-l 4576 -s10 -n100 -G 1</physim_run_args>
</testCase> </testCase>
<testCase id="000008"> <testCase id="000008">
<class>Run_CUDATest</class> <class>Run_Physim</class>
<desc>Run LDPC Test with CPU</desc> <desc>Run LDPC Test with CPU</desc>
<always_exec>true</always_exec>
<physim_test>ldpctest</physim_test>
<physim_run_args>-l 4928 -s10 -n100</physim_run_args> <physim_run_args>-l 4928 -s10 -n100</physim_run_args>
</testCase> </testCase>
<testCase id="000009"> <testCase id="000009">
<class>Run_CUDATest</class> <class>Run_Physim</class>
<desc>Run LDPC Test with GPU</desc> <desc>Run LDPC Test with GPU</desc>
<always_exec>true</always_exec>
<physim_test>ldpctest</physim_test>
<physim_run_args>-l 4928 -s10 -n100 -G 1</physim_run_args> <physim_run_args>-l 4928 -s10 -n100 -G 1</physim_run_args>
</testCase> </testCase>
<testCase id="000010"> <testCase id="000010">
<class>Run_CUDATest</class> <class>Run_Physim</class>
<desc>Run LDPC Test with CPU</desc> <desc>Run LDPC Test with CPU</desc>
<always_exec>true</always_exec>
<physim_test>ldpctest</physim_test>
<physim_run_args>-l 5280 -s10 -n100</physim_run_args> <physim_run_args>-l 5280 -s10 -n100</physim_run_args>
</testCase> </testCase>
<testCase id="000011"> <testCase id="000011">
<class>Run_CUDATest</class> <class>Run_Physim</class>
<desc>Run LDPC Test with GPU</desc> <desc>Run LDPC Test with GPU</desc>
<always_exec>true</always_exec>
<physim_test>ldpctest</physim_test>
<physim_run_args>-l 5280 -s10 -n100 -G 1</physim_run_args> <physim_run_args>-l 5280 -s10 -n100 -G 1</physim_run_args>
</testCase> </testCase>
<testCase id="000012"> <testCase id="000012">
<class>Run_CUDATest</class> <class>Run_Physim</class>
<desc>Run LDPC Test with CPU</desc> <desc>Run LDPC Test with CPU</desc>
<always_exec>true</always_exec>
<physim_test>ldpctest</physim_test>
<physim_run_args>-l 5632 -s10 -n100</physim_run_args> <physim_run_args>-l 5632 -s10 -n100</physim_run_args>
</testCase> </testCase>
<testCase id="000013"> <testCase id="000013">
<class>Run_CUDATest</class> <class>Run_Physim</class>
<desc>Run LDPC Test with GPU</desc> <desc>Run LDPC Test with GPU</desc>
<always_exec>true</always_exec>
<physim_test>ldpctest</physim_test>
<physim_run_args>-l 5632 -s10 -n100 -G 1</physim_run_args> <physim_run_args>-l 5632 -s10 -n100 -G 1</physim_run_args>
</testCase> </testCase>
<testCase id="000014"> <testCase id="000014">
<class>Run_CUDATest</class> <class>Run_Physim</class>
<desc>Run LDPC Test with CPU</desc> <desc>Run LDPC Test with CPU</desc>
<always_exec>true</always_exec>
<physim_test>ldpctest</physim_test>
<physim_run_args>-l 6336 -s10 -n100</physim_run_args> <physim_run_args>-l 6336 -s10 -n100</physim_run_args>
</testCase> </testCase>
<testCase id="000015"> <testCase id="000015">
<class>Run_CUDATest</class> <class>Run_Physim</class>
<desc>Run LDPC Test with GPU</desc> <desc>Run LDPC Test with GPU</desc>
<always_exec>true</always_exec>
<physim_test>ldpctest</physim_test>
<physim_run_args>-l 6336 -s10 -n100 -G 1</physim_run_args> <physim_run_args>-l 6336 -s10 -n100 -G 1</physim_run_args>
</testCase> </testCase>
<testCase id="000016"> <testCase id="000016">
<class>Run_CUDATest</class> <class>Run_Physim</class>
<desc>Run LDPC Test with CPU</desc> <desc>Run LDPC Test with CPU</desc>
<always_exec>true</always_exec>
<physim_test>ldpctest</physim_test>
<physim_run_args>-l 7040 -s10 -n100</physim_run_args> <physim_run_args>-l 7040 -s10 -n100</physim_run_args>
</testCase> </testCase>
<testCase id="000017"> <testCase id="000017">
<class>Run_CUDATest</class> <class>Run_Physim</class>
<desc>Run LDPC Test with GPU</desc> <desc>Run LDPC Test with GPU</desc>
<always_exec>true</always_exec>
<physim_test>ldpctest</physim_test>
<physim_run_args>-l 7040 -s10 -n100 -G 1</physim_run_args> <physim_run_args>-l 7040 -s10 -n100 -G 1</physim_run_args>
</testCase> </testCase>
<testCase id="000018"> <testCase id="000018">
<class>Run_CUDATest</class> <class>Run_Physim</class>
<desc>Run LDPC Test with CPU</desc> <desc>Run LDPC Test with CPU</desc>
<always_exec>true</always_exec>
<physim_test>ldpctest</physim_test>
<physim_run_args>-l 7744 -s10 -n100</physim_run_args> <physim_run_args>-l 7744 -s10 -n100</physim_run_args>
</testCase> </testCase>
<testCase id="000019"> <testCase id="000019">
<class>Run_CUDATest</class> <class>Run_Physim</class>
<desc>Run LDPC Test with GPU</desc> <desc>Run LDPC Test with GPU</desc>
<always_exec>true</always_exec>
<physim_test>ldpctest</physim_test>
<physim_run_args>-l 7744 -s10 -n100 -G 1</physim_run_args> <physim_run_args>-l 7744 -s10 -n100 -G 1</physim_run_args>
</testCase> </testCase>
<testCase id="000020"> <testCase id="000020">
<class>Run_CUDATest</class> <class>Run_Physim</class>
<desc>Run LDPC Test with CPU</desc> <desc>Run LDPC Test with CPU</desc>
<always_exec>true</always_exec>
<physim_test>ldpctest</physim_test>
<physim_run_args>-l 8448 -s10 -n100</physim_run_args> <physim_run_args>-l 8448 -s10 -n100</physim_run_args>
</testCase> </testCase>
<testCase id="000021"> <testCase id="000021">
<class>Run_CUDATest</class> <class>Run_Physim</class>
<desc>Run LDPC Test with GPU</desc> <desc>Run LDPC Test with GPU</desc>
<always_exec>true</always_exec>
<physim_test>ldpctest</physim_test>
<physim_run_args>-l 8448 -s10 -n100 -G 1</physim_run_args> <physim_run_args>-l 8448 -s10 -n100 -G 1</physim_run_args>
</testCase> </testCase>
......
<!--
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
-->
<testCaseList>
<htmlTabRef>build-offload</htmlTabRef>
<htmlTabName>Build physical simulators</htmlTabName>
<htmlTabIcon>tasks</htmlTabIcon>
<TestCaseRequestedList>000001</TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList>
<testCase id="000001">
<class>Build_PhySim</class>
<desc>Build physical simulators</desc>
<physim_build_args>--phy_simulators --ninja --noavx512</physim_build_args>
<forced_workspace_cleanup>FALSE</forced_workspace_cleanup>
</testCase>
</testCaseList>
...@@ -87,8 +87,8 @@ services: ...@@ -87,8 +87,8 @@ services:
container_name: rfsim5g-oai-cu container_name: rfsim5g-oai-cu
cap_drop: cap_drop:
- ALL - ALL
environment: environment:
USE_ADDITIONAL_OPTIONS: --sa --log_config.global_log_options level,nocolor,time USE_ADDITIONAL_OPTIONS: --log_config.global_log_options level,nocolor,time
ASAN_OPTIONS: detect_leaks=0 ASAN_OPTIONS: detect_leaks=0
depends_on: depends_on:
- oai-ext-dn - oai-ext-dn
...@@ -109,7 +109,7 @@ services: ...@@ -109,7 +109,7 @@ services:
cap_drop: cap_drop:
- ALL - ALL
environment: environment:
USE_ADDITIONAL_OPTIONS: --sa --rfsim USE_ADDITIONAL_OPTIONS: --rfsim
--log_config.global_log_options level,nocolor,time --log_config.global_log_options level,nocolor,time
--rfsimulator.options chanmod --rfsimulator.options chanmod
--telnetsrv --telnetsrv.listenaddr 192.168.71.171 --telnetsrv --telnetsrv.listenaddr 192.168.71.171
...@@ -121,7 +121,6 @@ services: ...@@ -121,7 +121,6 @@ services:
ipv4_address: 192.168.71.171 ipv4_address: 192.168.71.171
volumes: volumes:
- ../../conf_files/gnb-du.sa.band78.106prb.rfsim.conf:/opt/oai-gnb/etc/gnb.conf - ../../conf_files/gnb-du.sa.band78.106prb.rfsim.conf:/opt/oai-gnb/etc/gnb.conf
- ../../conf_files/rfsim_channel_ci.conf:/opt/oai-gnb/etc/rfsim_channel_ci.conf
healthcheck: healthcheck:
test: /bin/bash -c "pgrep nr-softmodem" test: /bin/bash -c "pgrep nr-softmodem"
interval: 10s interval: 10s
...@@ -137,7 +136,7 @@ services: ...@@ -137,7 +136,7 @@ services:
- NET_ADMIN # for interface bringup - NET_ADMIN # for interface bringup
- NET_RAW # for ping - NET_RAW # for ping
environment: environment:
USE_ADDITIONAL_OPTIONS: --sa --rfsim --log_config.global_log_options level,nocolor,time USE_ADDITIONAL_OPTIONS: --rfsim --log_config.global_log_options level,nocolor,time
-r 106 --numerology 1 -C 3619200000 -r 106 --numerology 1 -C 3619200000
--uicc0.imsi 208990100001100 --uicc0.imsi 208990100001100
--rfsimulator.serveraddr 192.168.71.171 --rfsimulator.serveraddr 192.168.71.171
...@@ -153,7 +152,6 @@ services: ...@@ -153,7 +152,6 @@ services:
- /dev/net/tun:/dev/net/tun - /dev/net/tun:/dev/net/tun
volumes: volumes:
- ../../conf_files/nrue.uicc.conf:/opt/oai-nr-ue/etc/nr-ue.conf - ../../conf_files/nrue.uicc.conf:/opt/oai-nr-ue/etc/nr-ue.conf
- ../../conf_files/rfsim_channel_ci.conf:/opt/oai-nr-ue/etc/rfsim_channel_ci.conf
healthcheck: healthcheck:
test: /bin/bash -c "pgrep nr-uesoftmodem" test: /bin/bash -c "pgrep nr-uesoftmodem"
interval: 10s interval: 10s
......
...@@ -86,7 +86,7 @@ services: ...@@ -86,7 +86,7 @@ services:
cap_drop: cap_drop:
- ALL - ALL
environment: environment:
USE_ADDITIONAL_OPTIONS: --sa -E --rfsim --log_config.global_log_options level,nocolor,time USE_ADDITIONAL_OPTIONS: -E --rfsim --log_config.global_log_options level,nocolor,time
ASAN_OPTIONS: detect_leaks=0 ASAN_OPTIONS: detect_leaks=0
depends_on: depends_on:
- oai-ext-dn - oai-ext-dn
...@@ -108,8 +108,8 @@ services: ...@@ -108,8 +108,8 @@ services:
cap_add: cap_add:
- NET_ADMIN # for interface bringup - NET_ADMIN # for interface bringup
- NET_RAW # for ping - NET_RAW # for ping
environment: environment:
USE_ADDITIONAL_OPTIONS: -E --sa --rfsim -r 106 --numerology 1 --uicc0.imsi 208990100001100 --band 66 -C 2169090000 --CO -400000000 --ssb 378 --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time USE_ADDITIONAL_OPTIONS: -E --rfsim -r 106 --numerology 1 --uicc0.imsi 208990100001100 --band 66 -C 2169090000 --CO -400000000 --ssb 378 --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time
depends_on: depends_on:
- oai-gnb - oai-gnb
networks: networks:
......
This diff is collapsed.
services:
mysql:
container_name: "l2sim-mysql"
image: mysql:8.0
volumes:
- ../5g_rfsimulator/oai_db.sql:/docker-entrypoint-initdb.d/oai_db.sql
- ../5g_rfsimulator/mysql-healthcheck.sh:/tmp/mysql-healthcheck.sh
environment:
- TZ=Europe/Paris
- MYSQL_DATABASE=oai_db
- MYSQL_USER=test
- MYSQL_PASSWORD=test
- MYSQL_ROOT_PASSWORD=linux
healthcheck:
test: /bin/bash -c "/tmp/mysql-healthcheck.sh"
interval: 10s
timeout: 5s
retries: 30
networks:
public_net:
ipv4_address: 192.168.71.131
oai-amf:
container_name: "l2sim-oai-amf"
image: oaisoftwarealliance/oai-amf:v2.0.0
environment:
- TZ=Europe/paris
volumes:
- ../5g_rfsimulator/mini_nonrf_config.yaml:/openair-amf/etc/config.yaml
depends_on:
- mysql
networks:
public_net:
ipv4_address: 192.168.71.132
oai-smf:
container_name: "l2sim-oai-smf"
image: oaisoftwarealliance/oai-smf:v2.0.0
environment:
- TZ=Europe/Paris
volumes:
- ../5g_rfsimulator/mini_nonrf_config.yaml:/openair-smf/etc/config.yaml
depends_on:
- oai-amf
networks:
public_net:
ipv4_address: 192.168.71.133
oai-upf:
container_name: "l2sim-oai-upf"
image: oaisoftwarealliance/oai-upf:v2.0.0
environment:
- TZ=Europe/Paris
volumes:
- ../5g_rfsimulator/mini_nonrf_config.yaml:/openair-upf/etc/config.yaml
depends_on:
- oai-smf
cap_add:
- NET_ADMIN
- SYS_ADMIN
cap_drop:
- ALL
privileged: true
networks:
public_net:
ipv4_address: 192.168.71.134
traffic_net:
ipv4_address: 192.168.72.134
oai-ext-dn:
privileged: true
container_name: "l2sim-oai-ext-dn"
image: oaisoftwarealliance/trf-gen-cn5g:focal
entrypoint: /bin/bash -c \
"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"
depends_on:
- oai-upf
networks:
traffic_net:
ipv4_address: 192.168.72.135
healthcheck:
test: /bin/bash -c "ping -c 2 192.168.72.134"
interval: 10s
timeout: 5s
retries: 5
oai-gnb:
image: ${REGISTRY:-oaisoftwarealliance}/${GNB_IMG:-oai-gnb}:${TAG:-develop}
container_name: "l2sim-oai-gnb"
cap_drop:
- ALL
network_mode: "host"
environment:
TZ: Europe/Paris
USE_ADDITIONAL_OPTIONS: --sa --nfapi VNF --emulate-l1 --log_config.global_log_options level,time,thread_id,nocolor
ASAN_OPTIONS: detect_leaks=0
depends_on:
- oai-upf
- oai-amf
volumes:
- ../../conf_files/gnb.sa.band78.106prb.l2sim.conf:/opt/oai-gnb/etc/gnb.conf
healthcheck:
test: /bin/bash -c "pgrep nr-softmodem"
interval: 10s
timeout: 5s
retries: 5
proxy:
image: oai-lte-multi-ue-proxy:latest
container_name: "l2sim-proxy"
cap_drop:
- ALL
network_mode: "host"
environment:
TZ: Europe/Paris
command: "/oai-lte-multi-ue-proxy/bin/proxy 1 --nr"
depends_on:
- oai-gnb
healthcheck:
test: /bin/bash -c "pgrep proxy"
interval: 10s
timeout: 5s
retries: 5
oai-nr-ue0:
image: ${REGISTRY:-oaisoftwarealliance}/${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
container_name: "l2sim-oai-nr-ue0"
cap_drop:
- ALL
cap_add:
- NET_ADMIN # for interface bringup
- NET_RAW # for ping
network_mode: "host"
environment:
TZ: Europe/Paris
OPENAIR_DIR: /opt/oai-nr-ue
USE_ADDITIONAL_OPTIONS: --nfapi STANDALONE_PNF --node-number 2 --sa --emulate-l1 --log_config.global_log_options level,time,thread_id,nocolor
ASAN_OPTIONS: detect_leaks=0
devices:
- /dev/net/tun:/dev/net/tun
volumes:
- ../../conf_files/nrue.band78.106prb.l2sim.conf:/opt/oai-nr-ue/etc/nr-ue.conf
- ../../../openair1/SIMULATION/LTE_PHY/BLER_SIMULATIONS/AWGN/AWGN_results:/opt/oai-nr-ue/openair1/SIMULATION/LTE_PHY/BLER_SIMULATIONS/AWGN/AWGN_results
depends_on:
- oai-gnb
- proxy
healthcheck:
test: /bin/bash -c "pgrep nr-uesoftmodem"
interval: 10s
timeout: 5s
retries: 5
networks:
public_net:
driver: bridge
name: l2sim-oai-public-net
ipam:
config:
- subnet: 192.168.71.128/26
driver_opts:
com.docker.network.bridge.name: "l2sim-public"
traffic_net:
driver: bridge
name: l2sim-oai-traffic-net
ipam:
config:
- subnet: 192.168.72.128/26
driver_opts:
com.docker.network.bridge.name: "l2sim-traffic"
...@@ -244,7 +244,7 @@ Create the entry for the second UE in `docker-compose.yaml` file as follows: ...@@ -244,7 +244,7 @@ Create the entry for the second UE in `docker-compose.yaml` file as follows:
- NET_ADMIN # for interface bringup - NET_ADMIN # for interface bringup
- NET_RAW # for ping - NET_RAW # for ping
environment: environment:
USE_ADDITIONAL_OPTIONS: -E --sa --rfsim -r 106 --numerology 1 -C 3619200000 --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time USE_ADDITIONAL_OPTIONS: -E --rfsim -r 106 --numerology 1 -C 3619200000 --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time
depends_on: depends_on:
- oai-gnb - oai-gnb
devices: devices:
......
...@@ -86,7 +86,7 @@ services: ...@@ -86,7 +86,7 @@ services:
cap_drop: cap_drop:
- ALL - ALL
environment: environment:
USE_ADDITIONAL_OPTIONS: --sa -E --rfsim --log_config.global_log_options level,nocolor,time USE_ADDITIONAL_OPTIONS: -E --rfsim --log_config.global_log_options level,nocolor,time
ASAN_OPTIONS: detect_leaks=0 ASAN_OPTIONS: detect_leaks=0
depends_on: depends_on:
- oai-ext-dn - oai-ext-dn
...@@ -109,7 +109,7 @@ services: ...@@ -109,7 +109,7 @@ services:
- NET_ADMIN # for interface bringup - NET_ADMIN # for interface bringup
- NET_RAW # for ping - NET_RAW # for ping
environment: environment:
USE_ADDITIONAL_OPTIONS: -E --sa --rfsim -r 106 --numerology 1 --uicc0.imsi 208990100001100 -C 3319680000 --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time USE_ADDITIONAL_OPTIONS: -E --rfsim -r 106 --numerology 1 --uicc0.imsi 208990100001100 -C 3319680000 --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time
depends_on: depends_on:
- oai-gnb - oai-gnb
networks: networks:
...@@ -133,7 +133,7 @@ services: ...@@ -133,7 +133,7 @@ services:
- NET_ADMIN # for interface bringup - NET_ADMIN # for interface bringup
- NET_RAW # for ping - NET_RAW # for ping
environment: environment:
USE_ADDITIONAL_OPTIONS: -E --sa --rfsim -r 106 --numerology 1 --uicc0.imsi 208990100001101 -C 3319680000 --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time USE_ADDITIONAL_OPTIONS: -E --rfsim -r 106 --numerology 1 --uicc0.imsi 208990100001101 -C 3319680000 --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time
depends_on: depends_on:
- oai-gnb - oai-gnb
networks: networks:
...@@ -157,7 +157,7 @@ services: ...@@ -157,7 +157,7 @@ services:
- NET_ADMIN # for interface bringup - NET_ADMIN # for interface bringup
- NET_RAW # for ping - NET_RAW # for ping
environment: environment:
USE_ADDITIONAL_OPTIONS: -E --sa --rfsim -r 106 --numerology 1 --uicc0.imsi 208990100001102 -C 3319680000 --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time USE_ADDITIONAL_OPTIONS: -E --rfsim -r 106 --numerology 1 --uicc0.imsi 208990100001102 -C 3319680000 --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time
depends_on: depends_on:
- oai-gnb - oai-gnb
networks: networks:
...@@ -181,7 +181,7 @@ services: ...@@ -181,7 +181,7 @@ services:
- NET_ADMIN # for interface bringup - NET_ADMIN # for interface bringup
- NET_RAW # for ping - NET_RAW # for ping
environment: environment:
USE_ADDITIONAL_OPTIONS: -E --sa --rfsim -r 106 --numerology 1 --uicc0.imsi 208990100001103 -C 3319680000 --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time USE_ADDITIONAL_OPTIONS: -E --rfsim -r 106 --numerology 1 --uicc0.imsi 208990100001103 -C 3319680000 --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time
depends_on: depends_on:
- oai-gnb - oai-gnb
networks: networks:
...@@ -205,7 +205,7 @@ services: ...@@ -205,7 +205,7 @@ services:
- NET_ADMIN # for interface bringup - NET_ADMIN # for interface bringup
- NET_RAW # for ping - NET_RAW # for ping
environment: environment:
USE_ADDITIONAL_OPTIONS: -E --sa --rfsim -r 106 --numerology 1 --uicc0.imsi 208990100001104 -C 3319680000 --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time USE_ADDITIONAL_OPTIONS: -E --rfsim -r 106 --numerology 1 --uicc0.imsi 208990100001104 -C 3319680000 --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time
depends_on: depends_on:
- oai-gnb - oai-gnb
networks: networks:
...@@ -229,7 +229,7 @@ services: ...@@ -229,7 +229,7 @@ services:
- NET_ADMIN # for interface bringup - NET_ADMIN # for interface bringup
- NET_RAW # for ping - NET_RAW # for ping
environment: environment:
USE_ADDITIONAL_OPTIONS: -E --sa --rfsim -r 106 --numerology 1 --uicc0.imsi 208990100001105 -C 3319680000 --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time USE_ADDITIONAL_OPTIONS: -E --rfsim -r 106 --numerology 1 --uicc0.imsi 208990100001105 -C 3319680000 --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time
depends_on: depends_on:
- oai-gnb - oai-gnb
networks: networks:
...@@ -253,7 +253,7 @@ services: ...@@ -253,7 +253,7 @@ services:
- NET_ADMIN # for interface bringup - NET_ADMIN # for interface bringup
- NET_RAW # for ping - NET_RAW # for ping
environment: environment:
USE_ADDITIONAL_OPTIONS: -E --sa --rfsim -r 106 --numerology 1 --uicc0.imsi 208990100001106 -C 3319680000 --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time USE_ADDITIONAL_OPTIONS: -E --rfsim -r 106 --numerology 1 --uicc0.imsi 208990100001106 -C 3319680000 --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time
depends_on: depends_on:
- oai-gnb - oai-gnb
networks: networks:
...@@ -277,7 +277,7 @@ services: ...@@ -277,7 +277,7 @@ services:
- NET_ADMIN # for interface bringup - NET_ADMIN # for interface bringup
- NET_RAW # for ping - NET_RAW # for ping
environment: environment:
USE_ADDITIONAL_OPTIONS: -E --sa --rfsim -r 106 --numerology 1 --uicc0.imsi 208990100001107 -C 3319680000 --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time USE_ADDITIONAL_OPTIONS: -E --rfsim -r 106 --numerology 1 --uicc0.imsi 208990100001107 -C 3319680000 --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time
depends_on: depends_on:
- oai-gnb - oai-gnb
networks: networks:
...@@ -301,7 +301,7 @@ services: ...@@ -301,7 +301,7 @@ services:
- NET_ADMIN # for interface bringup - NET_ADMIN # for interface bringup
- NET_RAW # for ping - NET_RAW # for ping
environment: environment:
USE_ADDITIONAL_OPTIONS: -E --sa --rfsim -r 106 --numerology 1 --uicc0.imsi 208990100001108 -C 3319680000 --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time USE_ADDITIONAL_OPTIONS: -E --rfsim -r 106 --numerology 1 --uicc0.imsi 208990100001108 -C 3319680000 --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time
depends_on: depends_on:
- oai-gnb - oai-gnb
networks: networks:
...@@ -325,7 +325,7 @@ services: ...@@ -325,7 +325,7 @@ services:
- NET_ADMIN # for interface bringup - NET_ADMIN # for interface bringup
- NET_RAW # for ping - NET_RAW # for ping
environment: environment:
USE_ADDITIONAL_OPTIONS: -E --sa --rfsim -r 106 --numerology 1 --uicc0.imsi 208990100001109 -C 3319680000 --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time USE_ADDITIONAL_OPTIONS: -E --rfsim -r 106 --numerology 1 --uicc0.imsi 208990100001109 -C 3319680000 --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time
depends_on: depends_on:
- oai-gnb - oai-gnb
networks: networks:
......
...@@ -3,4 +3,4 @@ services: ...@@ -3,4 +3,4 @@ services:
privileged: true privileged: true
stdin_open: true stdin_open: true
tty: true tty: true
command: gdb --args /opt/oai-nr-ue/bin/nr-uesoftmodem -O /opt/oai-nr-ue/etc/nr-ue.conf -E --sa --rfsim -r 106 --numerology 1 --uicc0.imsi 208990100001100 -C 3619200000 --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time command: gdb --args /opt/oai-nr-ue/bin/nr-uesoftmodem -O /opt/oai-nr-ue/etc/nr-ue.conf -E --rfsim -r 106 --numerology 1 --uicc0.imsi 208990100001100 -C 3619200000 --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time
...@@ -86,7 +86,7 @@ services: ...@@ -86,7 +86,7 @@ services:
cap_drop: cap_drop:
- ALL - ALL
environment: environment:
USE_ADDITIONAL_OPTIONS: --sa --rfsim --log_config.global_log_options level,nocolor,time USE_ADDITIONAL_OPTIONS: --rfsim --log_config.global_log_options level,nocolor,time
ASAN_OPTIONS: detect_leaks=0 ASAN_OPTIONS: detect_leaks=0
depends_on: depends_on:
- oai-ext-dn - oai-ext-dn
...@@ -109,7 +109,7 @@ services: ...@@ -109,7 +109,7 @@ services:
- NET_ADMIN # for interface bringup - NET_ADMIN # for interface bringup
- NET_RAW # for ping - NET_RAW # for ping
environment: environment:
USE_ADDITIONAL_OPTIONS: --sa --rfsim -r 24 --ssb 24 --numerology 1 -C 3604800000 --uicc0.imsi 208990100001100 --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time USE_ADDITIONAL_OPTIONS: --rfsim -r 24 --ssb 24 --numerology 1 -C 3604800000 --uicc0.imsi 208990100001100 --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time
depends_on: depends_on:
- oai-gnb - oai-gnb
networks: networks:
......
...@@ -86,7 +86,7 @@ services: ...@@ -86,7 +86,7 @@ services:
cap_drop: cap_drop:
- ALL - ALL
environment: environment:
USE_ADDITIONAL_OPTIONS: --sa --rfsim --log_config.global_log_options level,nocolor,time USE_ADDITIONAL_OPTIONS: --rfsim --log_config.global_log_options level,nocolor,time
ASAN_OPTIONS: detect_leaks=0 ASAN_OPTIONS: detect_leaks=0
depends_on: depends_on:
- oai-ext-dn - oai-ext-dn
...@@ -110,7 +110,7 @@ services: ...@@ -110,7 +110,7 @@ services:
- NET_ADMIN # for interface bringup - NET_ADMIN # for interface bringup
- NET_RAW # for ping - NET_RAW # for ping
environment: environment:
USE_ADDITIONAL_OPTIONS: --sa --rfsim -r 273 --numerology 1 --band 78 -C 3450720000 --ssb 1518 --ue-nb-ant-tx 2 --uicc0.imsi 208990100001100 --ue-nb-ant-rx 2 --uecap_file /opt/oai-nr-ue/etc/uecap.xml --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time USE_ADDITIONAL_OPTIONS: --rfsim -r 273 --numerology 1 --band 78 -C 3450720000 --ssb 1518 --ue-nb-ant-tx 2 --uicc0.imsi 208990100001100 --ue-nb-ant-rx 2 --uecap_file /opt/oai-nr-ue/etc/uecap.xml --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time
depends_on: depends_on:
- oai-gnb - oai-gnb
networks: networks:
......
services:
oai-du:
image: ${REGISTRY:-oaisoftwarealliance}/${GNB_IMG:-oai-gnb}:${TAG:-develop}
container_name: rfsim5g-oai-du
cap_drop:
- ALL
network_mode: "host"
environment:
USE_ADDITIONAL_OPTIONS: --sa --rfsim --MACRLCs.[0].local_n_address 172.21.16.109 --MACRLCs.[0].remote_n_address 172.21.6.22 --log_config.global_log_options level,nocolor,time
volumes:
- ../../conf_files/gnb-du.band78.106prb.rfsim.conf:/opt/oai-gnb/etc/gnb.conf
healthcheck:
test: /bin/bash -c "pgrep nr-softmodem"
interval: 10s
timeout: 5s
retries: 5
oai-nr-ue:
image: ${REGISTRY:-oaisoftwarealliance}/${NRUE_IMG:-oai-nr-ue}:${TAG:-develop}
container_name: rfsim5g-oai-nr-ue
cap_drop:
- ALL
cap_add:
- NET_ADMIN # for interface bringup
- NET_RAW # for ping
network_mode: "host"
environment:
USE_ADDITIONAL_OPTIONS: --sa --rfsim -r 106 --numerology 1 -C 3619200000 --uicc0.imsi 208990100001140 --rfsimulator.serveraddr 127.0.0.1 --log_config.global_log_options level,nocolor,time
depends_on:
- oai-du
devices:
- /dev/net/tun:/dev/net/tun
volumes:
- ../../conf_files/nrue.uicc.conf:/opt/oai-nr-ue/etc/nr-ue.conf
healthcheck:
test: /bin/bash -c "pgrep nr-uesoftmodem"
interval: 10s
timeout: 5s
retries: 5
...@@ -70,7 +70,7 @@ services: ...@@ -70,7 +70,7 @@ services:
cap_drop: cap_drop:
- ALL - ALL
environment: environment:
USE_ADDITIONAL_OPTIONS: --sa --log_config.global_log_options level,nocolor,time USE_ADDITIONAL_OPTIONS: --log_config.global_log_options level,nocolor,time
--gNBs.[0].E1_INTERFACE.[0].ipv4_cucp 192.168.77.2 --gNBs.[0].E1_INTERFACE.[0].ipv4_cucp 192.168.77.2
--gNBs.[0].local_s_address 192.168.72.2 --gNBs.[0].local_s_address 192.168.72.2
ASAN_OPTIONS: detect_leaks=0 ASAN_OPTIONS: detect_leaks=0
...@@ -97,7 +97,7 @@ services: ...@@ -97,7 +97,7 @@ services:
cap_drop: cap_drop:
- ALL - ALL
environment: environment:
USE_ADDITIONAL_OPTIONS: --sa --log_config.global_log_options level,nocolor,time USE_ADDITIONAL_OPTIONS: --log_config.global_log_options level,nocolor,time
--gNBs.[0].E1_INTERFACE.[0].ipv4_cucp 192.168.77.2 --gNBs.[0].E1_INTERFACE.[0].ipv4_cucp 192.168.77.2
--gNBs.[0].E1_INTERFACE.[0].ipv4_cuup 192.168.77.3 --gNBs.[0].E1_INTERFACE.[0].ipv4_cuup 192.168.77.3
--gNBs.[0].local_s_address 192.168.73.2 --gNBs.[0].local_s_address 192.168.73.2
...@@ -126,7 +126,7 @@ services: ...@@ -126,7 +126,7 @@ services:
cap_drop: cap_drop:
- ALL - ALL
environment: environment:
USE_ADDITIONAL_OPTIONS: --sa --log_config.global_log_options level,nocolor,time USE_ADDITIONAL_OPTIONS: --log_config.global_log_options level,nocolor,time
--gNBs.[0].gNB_CU_UP_ID 0xe01 --gNBs.[0].gNB_CU_UP_ID 0xe01
--gNBs.[0].E1_INTERFACE.[0].ipv4_cucp 192.168.77.2 --gNBs.[0].E1_INTERFACE.[0].ipv4_cucp 192.168.77.2
--gNBs.[0].E1_INTERFACE.[0].ipv4_cuup 192.168.77.4 --gNBs.[0].E1_INTERFACE.[0].ipv4_cuup 192.168.77.4
...@@ -158,7 +158,7 @@ services: ...@@ -158,7 +158,7 @@ services:
cap_drop: cap_drop:
- ALL - ALL
environment: environment:
USE_ADDITIONAL_OPTIONS: --sa --log_config.global_log_options level,nocolor,time USE_ADDITIONAL_OPTIONS: --log_config.global_log_options level,nocolor,time
--gNBs.[0].gNB_CU_UP_ID 0xe02 --gNBs.[0].gNB_CU_UP_ID 0xe02
--gNBs.[0].E1_INTERFACE.[0].ipv4_cucp 192.168.77.2 --gNBs.[0].E1_INTERFACE.[0].ipv4_cucp 192.168.77.2
--gNBs.[0].E1_INTERFACE.[0].ipv4_cuup 192.168.77.5 --gNBs.[0].E1_INTERFACE.[0].ipv4_cuup 192.168.77.5
...@@ -190,7 +190,7 @@ services: ...@@ -190,7 +190,7 @@ services:
cap_drop: cap_drop:
- ALL - ALL
environment: environment:
USE_ADDITIONAL_OPTIONS: --sa --rfsim --log_config.global_log_options level,nocolor,time USE_ADDITIONAL_OPTIONS: --rfsim --log_config.global_log_options level,nocolor,time
--MACRLCs.[0].local_n_address 192.168.72.3 --MACRLCs.[0].local_n_address 192.168.72.3
--MACRLCs.[0].remote_n_address oai-cucp --MACRLCs.[0].remote_n_address oai-cucp
--MACRLCs.[0].local_n_address_f1u 192.168.73.3 --MACRLCs.[0].local_n_address_f1u 192.168.73.3
...@@ -219,7 +219,7 @@ services: ...@@ -219,7 +219,7 @@ services:
cap_drop: cap_drop:
- ALL - ALL
environment: environment:
USE_ADDITIONAL_OPTIONS: --sa --rfsim --log_config.global_log_options level,nocolor,time USE_ADDITIONAL_OPTIONS: --rfsim --log_config.global_log_options level,nocolor,time
--gNBs.[0].gNB_DU_ID 0xe01 --gNBs.[0].gNB_DU_ID 0xe01
--gNBs.[0].nr_cellid 87654321 --gNBs.[0].nr_cellid 87654321
--gNBs.[0].servingCellConfigCommon.[0].physCellId 1 --gNBs.[0].servingCellConfigCommon.[0].physCellId 1
...@@ -251,7 +251,7 @@ services: ...@@ -251,7 +251,7 @@ services:
cap_drop: cap_drop:
- ALL - ALL
environment: environment:
USE_ADDITIONAL_OPTIONS: --sa --rfsim --log_config.global_log_options level,nocolor,time USE_ADDITIONAL_OPTIONS: --rfsim --log_config.global_log_options level,nocolor,time
--gNBs.[0].gNB_DU_ID 0xe02 --gNBs.[0].gNB_DU_ID 0xe02
--gNBs.[0].nr_cellid 11111111 --gNBs.[0].nr_cellid 11111111
--gNBs.[0].servingCellConfigCommon.[0].physCellId 2 --gNBs.[0].servingCellConfigCommon.[0].physCellId 2
...@@ -286,7 +286,7 @@ services: ...@@ -286,7 +286,7 @@ services:
- NET_ADMIN # for interface bringup - NET_ADMIN # for interface bringup
- NET_RAW # for ping - NET_RAW # for ping
environment: environment:
USE_ADDITIONAL_OPTIONS: --sa --rfsim --log_config.global_log_options level,nocolor,time USE_ADDITIONAL_OPTIONS: --rfsim --log_config.global_log_options level,nocolor,time
-r 106 --numerology 1 -C 3619200000 -r 106 --numerology 1 -C 3619200000
--uicc0.imsi 208990100001100 --uicc0.imsi 208990100001100
--rfsimulator.serveraddr oai-du --rfsimulator.serveraddr oai-du
...@@ -314,7 +314,7 @@ services: ...@@ -314,7 +314,7 @@ services:
- NET_ADMIN # for interface bringup - NET_ADMIN # for interface bringup
- NET_RAW # for ping - NET_RAW # for ping
environment: environment:
USE_ADDITIONAL_OPTIONS: --sa --rfsim --log_config.global_log_options level,nocolor,time USE_ADDITIONAL_OPTIONS: --rfsim --log_config.global_log_options level,nocolor,time
-r 106 --numerology 1 -C 3619200000 -r 106 --numerology 1 -C 3619200000
--uicc0.imsi 208990100001101 --uicc0.nssai_sst 2 --uicc0.imsi 208990100001101 --uicc0.nssai_sst 2
--rfsimulator.serveraddr 192.168.78.3 --rfsimulator.serveraddr 192.168.78.3
...@@ -342,7 +342,7 @@ services: ...@@ -342,7 +342,7 @@ services:
- NET_ADMIN # for interface bringup - NET_ADMIN # for interface bringup
- NET_RAW # for ping - NET_RAW # for ping
environment: environment:
USE_ADDITIONAL_OPTIONS: --sa --rfsim --log_config.global_log_options level,nocolor,time USE_ADDITIONAL_OPTIONS: --rfsim --log_config.global_log_options level,nocolor,time
-r 106 --numerology 1 -C 3619200000 -r 106 --numerology 1 -C 3619200000
--uicc0.imsi 208990100001102 --uicc0.nssai_sst 3 --uicc0.imsi 208990100001102 --uicc0.nssai_sst 3
--rfsimulator.serveraddr 192.168.78.4 --rfsimulator.serveraddr 192.168.78.4
......
...@@ -87,7 +87,7 @@ services: ...@@ -87,7 +87,7 @@ services:
cap_drop: cap_drop:
- ALL - ALL
environment: environment:
USE_ADDITIONAL_OPTIONS: --sa --rfsim --log_config.global_log_options level,nocolor,time USE_ADDITIONAL_OPTIONS: --rfsim --log_config.global_log_options level,nocolor,time
ASAN_OPTIONS: detect_leaks=0 ASAN_OPTIONS: detect_leaks=0
networks: networks:
public_net: public_net:
...@@ -109,7 +109,7 @@ services: ...@@ -109,7 +109,7 @@ services:
- NET_ADMIN # for interface bringup - NET_ADMIN # for interface bringup
- NET_RAW # for ping - NET_RAW # for ping
environment: environment:
USE_ADDITIONAL_OPTIONS: --sa --rfsim USE_ADDITIONAL_OPTIONS: --rfsim
--rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time
-r 32 --numerology 3 --band 261 -C 27533160000 --ssb 73 -r 32 --numerology 3 --band 261 -C 27533160000 --ssb 73
ASAN_OPTIONS: detect_leaks=0 ASAN_OPTIONS: detect_leaks=0
......
...@@ -86,7 +86,7 @@ services: ...@@ -86,7 +86,7 @@ services:
cap_drop: cap_drop:
- ALL - ALL
environment: environment:
USE_ADDITIONAL_OPTIONS: --sa --rfsim --rfsimulator.prop_delay 238.74 --log_config.global_log_options level,nocolor,time USE_ADDITIONAL_OPTIONS: --rfsim --rfsimulator.prop_delay 238.74 --log_config.global_log_options level,nocolor,time
ASAN_OPTIONS: detect_leaks=0 ASAN_OPTIONS: detect_leaks=0
depends_on: depends_on:
- oai-ext-dn - oai-ext-dn
...@@ -110,7 +110,7 @@ services: ...@@ -110,7 +110,7 @@ services:
- NET_ADMIN # for interface bringup - NET_ADMIN # for interface bringup
- NET_RAW # for ping - NET_RAW # for ping
environment: environment:
USE_ADDITIONAL_OPTIONS: --band 66 -C 2152680000 --CO -400000000 -r 25 --numerology 0 --ssb 48 --sa --rfsim --rfsimulator.prop_delay 238.74 --ntn-koffset 478 --ntn-ta-common 477.48 --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time USE_ADDITIONAL_OPTIONS: --band 66 -C 2152680000 --CO -400000000 -r 25 --numerology 0 --ssb 48 --rfsim --rfsimulator.prop_delay 238.74 --ntn-koffset 478 --ntn-ta-common 477.48 --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time
depends_on: depends_on:
- oai-gnb - oai-gnb
networks: networks:
......
...@@ -86,7 +86,7 @@ services: ...@@ -86,7 +86,7 @@ services:
cap_drop: cap_drop:
- ALL - ALL
environment: environment:
USE_ADDITIONAL_OPTIONS: --sa --rfsim --log_config.global_log_options level,nocolor,time USE_ADDITIONAL_OPTIONS: --rfsim --log_config.global_log_options level,nocolor,time
ASAN_OPTIONS: detect_leaks=0 ASAN_OPTIONS: detect_leaks=0
depends_on: depends_on:
- oai-ext-dn - oai-ext-dn
...@@ -110,7 +110,7 @@ services: ...@@ -110,7 +110,7 @@ services:
- NET_ADMIN # for interface bringup - NET_ADMIN # for interface bringup
- NET_RAW # for ping - NET_RAW # for ping
environment: environment:
USE_ADDITIONAL_OPTIONS: --sa --rfsim -r 25 --numerology 0 --uicc0.imsi 208990100001100 --band 66 -C 2152680000 --CO -400000000 --ssb 48 --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time USE_ADDITIONAL_OPTIONS: --rfsim -r 25 --numerology 0 --uicc0.imsi 208990100001100 --band 66 -C 2152680000 --CO -400000000 --ssb 48 --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time
depends_on: depends_on:
- oai-gnb - oai-gnb
networks: networks:
......
services:
oai-gnb:
image: ${REGISTRY:-oaisoftwarealliance}/${GNB_IMG:-oai-gnb}:${TAG:-develop}
network_mode: "host"
container_name: oai-gnb
cap_drop:
- ALL
cap_add:
- SYS_NICE
- IPC_LOCK
environment:
TZ: Europe/Paris
USE_ADDITIONAL_OPTIONS: --log_config.global_log_options level,nocolor,time
volumes:
- ../../conf_files/gnb.sa.band77.162prb.usrpn310.4x4.conf:/opt/oai-gnb/etc/gnb.conf
healthcheck:
test: /bin/bash -c "pgrep nr-softmodem"
interval: 10s
timeout: 5s
retries: 5
...@@ -12,7 +12,7 @@ services: ...@@ -12,7 +12,7 @@ services:
core: -1 # for core dumps core: -1 # for core dumps
environment: environment:
TZ: Europe/Paris TZ: Europe/Paris
USE_ADDITIONAL_OPTIONS: --sa --tune-offset 20000000 -A 90 --log_config.global_log_options level,nocolor,time USE_ADDITIONAL_OPTIONS: --tune-offset 20000000 -A 90 --log_config.global_log_options level,nocolor,time
volumes: volumes:
- ../../conf_files/gnb.sa.band78.106prb.n310.7ds2u.conf:/opt/oai-gnb/etc/gnb.conf - ../../conf_files/gnb.sa.band78.106prb.n310.7ds2u.conf:/opt/oai-gnb/etc/gnb.conf
healthcheck: healthcheck:
......
...@@ -17,7 +17,7 @@ services: ...@@ -17,7 +17,7 @@ services:
#entrypoint: /bin/bash -c "sleep infinity" #entrypoint: /bin/bash -c "sleep infinity"
environment: environment:
TZ: Europe/Paris TZ: Europe/Paris
USE_ADDITIONAL_OPTIONS: --usrp-args type=n3xx,name=ni-n3xx-31641B9,addr=192.168.10.2 -r 106 --numerology 1 --band 78 -C 3511200000 --sa --ue-fo-compensation --ue-rxgain 65 --tune-offset 20000000 -A 90 --log_config.global_log_options level,nocolor,time --uicc0.imsi 001020000000111 --uicc0.nssai_sd 16777215 USE_ADDITIONAL_OPTIONS: --usrp-args type=n3xx,name=ni-n3xx-31641B9,addr=192.168.10.2 -r 106 --numerology 1 --band 78 -C 3511200000 --ue-fo-compensation --ue-rxgain 65 --tune-offset 20000000 -A 90 --log_config.global_log_options level,nocolor,time --uicc0.imsi 001020000000111 --uicc0.nssai_sd 16777215
volumes: volumes:
- ../../conf_files/ue.sa.conf:/opt/oai-nr-ue/etc/nr-ue.conf - ../../conf_files/ue.sa.conf:/opt/oai-nr-ue/etc/nr-ue.conf
healthcheck: healthcheck:
......
...@@ -11,7 +11,7 @@ services: ...@@ -11,7 +11,7 @@ services:
core: -1 # for core dumps core: -1 # for core dumps
environment: environment:
USE_B2XX: 'yes' USE_B2XX: 'yes'
USE_ADDITIONAL_OPTIONS: -E -q --RUs.[0].sdr_addrs serial=30C51D4 --continuous-tx --log_config.global_log_options level,nocolor,time,line_num,function USE_ADDITIONAL_OPTIONS: --nsa -E -q --RUs.[0].sdr_addrs serial=30C51D4 --continuous-tx --log_config.global_log_options level,nocolor,time,line_num,function
devices: devices:
- /dev/bus/usb/:/dev/bus/usb/ - /dev/bus/usb/:/dev/bus/usb/
volumes: volumes:
......
...@@ -12,7 +12,6 @@ services: ...@@ -12,7 +12,6 @@ services:
core: -1 # for core dumps core: -1 # for core dumps
environment: environment:
TZ: Europe/Paris TZ: Europe/Paris
USE_ADDITIONAL_OPTIONS: --sa
volumes: volumes:
- ../../conf_files/gnb.sa.band78.51prb.aw2s.ddsuu.2x2.conf:/opt/oai-gnb-aw2s/etc/gnb.conf - ../../conf_files/gnb.sa.band78.51prb.aw2s.ddsuu.2x2.conf:/opt/oai-gnb-aw2s/etc/gnb.conf
healthcheck: healthcheck:
......
...@@ -12,7 +12,6 @@ services: ...@@ -12,7 +12,6 @@ services:
core: -1 # for core dumps core: -1 # for core dumps
environment: environment:
TZ: Europe/Paris TZ: Europe/Paris
USE_ADDITIONAL_OPTIONS: --sa
volumes: volumes:
- ../../conf_files/gnb.sa.band78.51prb.aw2s.ddsuu.conf:/opt/oai-gnb-aw2s/etc/gnb.conf - ../../conf_files/gnb.sa.band78.51prb.aw2s.ddsuu.conf:/opt/oai-gnb-aw2s/etc/gnb.conf
healthcheck: healthcheck:
......
...@@ -11,7 +11,7 @@ services: ...@@ -11,7 +11,7 @@ services:
core: -1 # for core dumps core: -1 # for core dumps
environment: environment:
USE_B2XX: 'yes' USE_B2XX: 'yes'
USE_ADDITIONAL_OPTIONS: --sa --RUs.[0].sdr_addrs serial=30C51D4 --telnetsrv --telnetsrv.shrmod ci --continuous-tx --log_config.global_log_options level,nocolor,time,line_num,function USE_ADDITIONAL_OPTIONS: --RUs.[0].sdr_addrs serial=30C51D4 --telnetsrv --telnetsrv.shrmod ci --continuous-tx --log_config.global_log_options level,nocolor,time,line_num,function
devices: devices:
- /dev/bus/usb/:/dev/bus/usb/ - /dev/bus/usb/:/dev/bus/usb/
volumes: volumes:
......
...@@ -7,8 +7,7 @@ services: ...@@ -7,8 +7,7 @@ services:
ulimits: ulimits:
core: -1 # for core dumps core: -1 # for core dumps
environment: environment:
USE_ADDITIONAL_OPTIONS: --sa USE_ADDITIONAL_OPTIONS: --telnetsrv --telnetsrv.listenport 9090 --telnetsrv.shrmod ci
--telnetsrv --telnetsrv.listenport 9090 --telnetsrv.shrmod ci
--log_config.global_log_options level,nocolor,time,line_num,function --log_config.global_log_options level,nocolor,time,line_num,function
volumes: volumes:
- ../../conf_files/gnb-cucp.sa.f1.quectel.conf:/opt/oai-gnb/etc/gnb.conf - ../../conf_files/gnb-cucp.sa.f1.quectel.conf:/opt/oai-gnb/etc/gnb.conf
...@@ -35,8 +34,7 @@ services: ...@@ -35,8 +34,7 @@ services:
ulimits: ulimits:
core: -1 # for core dumps core: -1 # for core dumps
environment: environment:
USE_ADDITIONAL_OPTIONS: --sa USE_ADDITIONAL_OPTIONS: --log_config.global_log_options level,nocolor,time,line_num,function
--log_config.global_log_options level,nocolor,time,line_num,function
volumes: volumes:
- ../../conf_files/gnb-cuup.sa.f1.quectel.conf:/opt/oai-gnb/etc/gnb.conf - ../../conf_files/gnb-cuup.sa.f1.quectel.conf:/opt/oai-gnb/etc/gnb.conf
# for performance reasons, we use host mode: in bridge mode, we have # for performance reasons, we use host mode: in bridge mode, we have
...@@ -63,8 +61,7 @@ services: ...@@ -63,8 +61,7 @@ services:
core: -1 # for core dumps core: -1 # for core dumps
environment: environment:
USE_B2XX: 'yes' USE_B2XX: 'yes'
USE_ADDITIONAL_OPTIONS: --sa USE_ADDITIONAL_OPTIONS: --RUs.[0].sdr_addrs serial=30C51D4
--RUs.[0].sdr_addrs serial=30C51D4
--continuous-tx -E --continuous-tx -E
--telnetsrv --telnetsrv.listenport 9091 --telnetsrv.shrmod ci --telnetsrv --telnetsrv.listenport 9091 --telnetsrv.shrmod ci
--log_config.global_log_options level,nocolor,time,line_num,function --log_config.global_log_options level,nocolor,time,line_num,function
......
...@@ -7,8 +7,7 @@ services: ...@@ -7,8 +7,7 @@ services:
ulimits: ulimits:
core: -1 # for core dumps core: -1 # for core dumps
environment: environment:
USE_ADDITIONAL_OPTIONS: --sa USE_ADDITIONAL_OPTIONS: --telnetsrv --telnetsrv.listenport 9090 --telnetsrv.shrmod ci
--telnetsrv --telnetsrv.listenport 9090 --telnetsrv.shrmod ci
--log_config.global_log_options level,nocolor,time,line_num,function --log_config.global_log_options level,nocolor,time,line_num,function
volumes: volumes:
- ../../conf_files/gnb-cu.sa.f1.conf:/opt/oai-gnb/etc/gnb.conf - ../../conf_files/gnb-cu.sa.f1.conf:/opt/oai-gnb/etc/gnb.conf
...@@ -37,7 +36,7 @@ services: ...@@ -37,7 +36,7 @@ services:
core: -1 # for core dumps core: -1 # for core dumps
environment: environment:
USE_B2XX: 'yes' USE_B2XX: 'yes'
USE_ADDITIONAL_OPTIONS: --sa --RUs.[0].sdr_addrs serial=30C51D4 --continuous-tx USE_ADDITIONAL_OPTIONS: --RUs.[0].sdr_addrs serial=30C51D4 --continuous-tx
--telnetsrv --telnetsrv.listenport 9091 --telnetsrv.shrmod ci --telnetsrv --telnetsrv.listenport 9091 --telnetsrv.shrmod ci
--gNBs.[0].min_rxtxtime 2 --gNBs.[0].do_CSIRS 1 --gNBs.[0].do_SRS 0 --L1s.[0].max_ldpc_iterations 20 --gNBs.[0].min_rxtxtime 2 --gNBs.[0].do_CSIRS 1 --gNBs.[0].do_SRS 0 --L1s.[0].max_ldpc_iterations 20
--log_config.global_log_options level,nocolor,time,line_num,function --log_config.global_log_options level,nocolor,time,line_num,function
......
...@@ -10,7 +10,7 @@ services: ...@@ -10,7 +10,7 @@ services:
container_name: oai-gnb container_name: oai-gnb
environment: environment:
TZ: Europe/Paris TZ: Europe/Paris
USE_ADDITIONAL_OPTIONS: --sa --thread-pool 6,7,8,9 USE_ADDITIONAL_OPTIONS: --thread-pool 6,7,8,9
devices: devices:
- /dev/vfio:/dev/vfio/ - /dev/vfio:/dev/vfio/
volumes: volumes:
......
...@@ -10,7 +10,7 @@ services: ...@@ -10,7 +10,7 @@ services:
container_name: oai-gnb container_name: oai-gnb
environment: environment:
TZ: Europe/Paris TZ: Europe/Paris
USE_ADDITIONAL_OPTIONS: --sa --thread-pool 6,7,8,9 USE_ADDITIONAL_OPTIONS: --thread-pool 6,7,8,9
devices: devices:
- /dev/vfio:/dev/vfio/ - /dev/vfio:/dev/vfio/
volumes: volumes:
......
...@@ -11,7 +11,7 @@ services: ...@@ -11,7 +11,7 @@ services:
core: -1 # for core dumps core: -1 # for core dumps
environment: environment:
USE_B2XX: 'yes' USE_B2XX: 'yes'
USE_ADDITIONAL_OPTIONS: --sa --RUs.[0].sdr_addrs serial=30C51D4 --telnetsrv --telnetsrv.shrmod ci --continuous-tx --log_config.global_log_options level,nocolor,time,line_num,function -E USE_ADDITIONAL_OPTIONS: --RUs.[0].sdr_addrs serial=30C51D4 --telnetsrv --telnetsrv.shrmod ci --continuous-tx --log_config.global_log_options level,nocolor,time,line_num,function -E
devices: devices:
- /dev/bus/usb/:/dev/bus/usb/ - /dev/bus/usb/:/dev/bus/usb/
volumes: volumes:
......
...@@ -65,7 +65,7 @@ Note: only LTTng 2.3.8 is supported. ...@@ -65,7 +65,7 @@ Note: only LTTng 2.3.8 is supported.
1. **Run gNB:** 1. **Run gNB:**
```bash ```bash
./$binary_path -O $configuration_file PARALLEL_SINGLE_THREAD --rfsimulator.serveraddr server --rfsim --sa -E ./$binary_path -O $configuration_file PARALLEL_SINGLE_THREAD --rfsimulator.serveraddr server --rfsim -E
``` ```
## Verifying Tracepoints ## Verifying Tracepoints
......
...@@ -32,6 +32,7 @@ ...@@ -32,6 +32,7 @@
#define _GNU_SOURCE #define _GNU_SOURCE
#include <sys/types.h> #include <sys/types.h>
#include <sys/socket.h> #include <sys/socket.h>
#include <sys/sysinfo.h>
#include <netinet/in.h> #include <netinet/in.h>
#include <arpa/inet.h> #include <arpa/inet.h>
#include <netdb.h> #include <netdb.h>
...@@ -222,11 +223,8 @@ char aname[256]; ...@@ -222,11 +223,8 @@ char aname[256];
tdata->numlines = 0; tdata->numlines = 0;
} }
unsigned int eax = 11, ebx = 0, ecx = 1, edx = 0; int nprocs = get_nprocs();
prnt("System has %d cores", nprocs);
asm volatile("cpuid" : "=a"(eax), "=b"(ebx), "=c"(ecx), "=d"(edx) : "0"(eax), "2"(ecx) :);
prnt("System has %d cores %d threads %d Actual threads", eax, ebx, edx);
prnt("\n id name state USRmod KRNmod prio nice vsize proc pol \n\n"); prnt("\n id name state USRmod KRNmod prio nice vsize proc pol \n\n");
snprintf(aname, sizeof(aname), "/proc/%d/stat", getpid()); snprintf(aname, sizeof(aname), "/proc/%d/stat", getpid());
......
...@@ -49,7 +49,7 @@ ...@@ -49,7 +49,7 @@
* ./build_oai --build-lib telnetsrv * ./build_oai --build-lib telnetsrv
* *
* Loading the module: * Loading the module:
* sudo ./nr-softmodem --sa -E --rfsim --log_config.global_log_options level,nocolor,time -O ~/gnb.sa.band78.106prb.rfsim.conf --telnetsrv --telnetsrv.shrmod rrc * sudo ./nr-softmodem -E --rfsim --log_config.global_log_options level,nocolor,time -O ~/gnb.sa.band78.106prb.rfsim.conf --telnetsrv --telnetsrv.shrmod rrc
*/ */
static int get_single_ue_id(void) static int get_single_ue_id(void)
......
...@@ -277,7 +277,7 @@ To trigger the back-end use the `--websrv` option, possibly modifying the parame ...@@ -277,7 +277,7 @@ To trigger the back-end use the `--websrv` option, possibly modifying the parame
`./nr-softmodem -O /usr/local/oai/conf/gnb.band78.sa.fr1.106PRB.usrpb210.conf --rfsim --rfsimulator.serveraddr server --telnetsrv --telnetsrv.listenstdin --websrv --rfsimulator.options chanmod` `./nr-softmodem -O /usr/local/oai/conf/gnb.band78.sa.fr1.106PRB.usrpb210.conf --rfsim --rfsimulator.serveraddr server --telnetsrv --telnetsrv.listenstdin --websrv --rfsimulator.options chanmod`
.`/nr-uesoftmodem -O /usr/local/oai/conf/nrue_sim.conf --sa --numerology 1 -r 106 -C 3649440000 --rfsim --rfsimulator.serveraddr 127.0.0.1 --websrv --telnetsrv --websrv.listenport 8092 --telnetsrv.listenport 8091` `./nr-uesoftmodem -O /usr/local/oai/conf/nrue_sim.conf --numerology 1 -r 106 -C 3649440000 --rfsim --rfsimulator.serveraddr 127.0.0.1 --websrv --telnetsrv --websrv.listenport 8092 --telnetsrv.listenport 8091`
......
...@@ -139,7 +139,7 @@ Note: A 5G core must be running at this point. Steps to start the OAI 5G core ca ...@@ -139,7 +139,7 @@ Note: A 5G core must be running at this point. Steps to start the OAI 5G core ca
1. Start the CUCP first by running the following command 1. Start the CUCP first by running the following command
``` ```
sudo ./nr-softmodem -O ../../../ci-scripts/conf_files/gnb-cucp.sa.f1.conf --gNBs.[0].min_rxtxtime 6 --sa sudo ./nr-softmodem -O ../../../ci-scripts/conf_files/gnb-cucp.sa.f1.conf --gNBs.[0].min_rxtxtime 6
``` ```
Note that `min_rxtxtime` should be set to `6` only when you are connecting an OAI UE to the gNB. Note that `min_rxtxtime` should be set to `6` only when you are connecting an OAI UE to the gNB.
...@@ -148,12 +148,12 @@ Note that `min_rxtxtime` should be set to `6` only when you are connecting an OA ...@@ -148,12 +148,12 @@ Note that `min_rxtxtime` should be set to `6` only when you are connecting an OA
CUUP (has its own executable): CUUP (has its own executable):
``` ```
sudo ./nr-cuup -O ../../../ci-scripts/conf_files/gnb-cuup.sa.f1.conf --sa sudo ./nr-cuup -O ../../../ci-scripts/conf_files/gnb-cuup.sa.f1.conf
``` ```
DU: DU:
``` ```
sudo ./nr-softmodem -O ../../../ci-scripts/conf_files/gNB_SA_DU.conf --rfsim --sa sudo ./nr-softmodem -O ../../../ci-scripts/conf_files/gNB_SA_DU.conf --rfsim
``` ```
You need to use `--rfsim` if you are running the test with rfsimulator. You need to use `--rfsim` if you are running the test with rfsimulator.
...@@ -162,7 +162,7 @@ You need to use `--rfsim` if you are running the test with rfsimulator. ...@@ -162,7 +162,7 @@ You need to use `--rfsim` if you are running the test with rfsimulator.
OAI UE: OAI UE:
``` ```
sudo ./nr-uesoftmodem -r 106 --numerology 1 --band 78 -C 3619200000 --rfsim --sa --rfsimulator.serveraddr 127.0.0.1 sudo ./nr-uesoftmodem -r 106 --numerology 1 --band 78 -C 3619200000 --rfsim --rfsimulator.serveraddr 127.0.0.1
``` ```
# 3. Configuration file IP addresses of network functions # 3. Configuration file IP addresses of network functions
......
...@@ -185,8 +185,8 @@ To start CU/DU, you use `./nr-softmodem` with the appropriate configuration ...@@ -185,8 +185,8 @@ To start CU/DU, you use `./nr-softmodem` with the appropriate configuration
files, for instance: files, for instance:
``` ```
sudo cmake_targets/ran_build/build/nr-softmodem --sa -O ci-scripts/conf_files/gnb-cu.sa.band78.106prb.conf sudo cmake_targets/ran_build/build/nr-softmodem -O ci-scripts/conf_files/gnb-cu.sa.band78.106prb.conf
sudo cmake_targets/ran_build/build/nr-softmodem --sa -O ci-scripts/conf_files/gnb-du.sa.band78.106prb.rfsim.conf sudo cmake_targets/ran_build/build/nr-softmodem -O ci-scripts/conf_files/gnb-du.sa.band78.106prb.rfsim.conf
``` ```
These files are tested in the CI, and are configured for use in docker, These files are tested in the CI, and are configured for use in docker,
......
...@@ -42,6 +42,8 @@ Normally it should be fine to run both executables on the same host using the `l ...@@ -42,6 +42,8 @@ Normally it should be fine to run both executables on the same host using the `l
## 5G L2 nFAPI simulator ## 5G L2 nFAPI simulator
**Note: L2 simulator does not work anymore.**
### Download and Build the Proxy Server (from EpiSci) ### Download and Build the Proxy Server (from EpiSci)
```bash ```bash
...@@ -60,11 +62,11 @@ $ sudo -E ./build/proxy $number_of_ues --nr ...@@ -60,11 +62,11 @@ $ sudo -E ./build/proxy $number_of_ues --nr
### Start gNB ### Start gNB
```bash ```bash
$ sudo -E ./nr-softmodem -O ../ci-scripts/conf_files/episci/proxy_rcc.band78.tm1.106PRB.nfapi.conf --nfapi VNF --noS1 --sa --emulate-l1 $ sudo -E ./nr-softmodem -O ../ci-scripts/conf_files/episci/proxy_rcc.band78.tm1.106PRB.nfapi.conf --nfapi VNF --noS1 --emulate-l1
``` ```
### Start UE ### Start UE
```bash ```bash
$ sudo -E ./nr-uesoftmodem -O ../ci-scripts/conf_files/nrue.uicc.conf --nfapi STANDALONE_PNF --node-number 2 --sa --emulate-l1 $ sudo -E ./nr-uesoftmodem -O ../ci-scripts/conf_files/nrue.uicc.conf --nfapi STANDALONE_PNF --node-number 2 --emulate-l1
``` ```
### EpiSci's Documentation ### 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). A more detailed tutorial is available on the [EpiSci GitHub Repository](https://github.com/EpiSci/oai-lte-5g-multi-ue-proxy#readme).
...@@ -76,13 +78,10 @@ This proxy allows to perform L2 nFAPI simulator for: ...@@ -76,13 +78,10 @@ This proxy allows to perform L2 nFAPI simulator for:
* 5G-SA * 5G-SA
### L2 Simulator as Docker Containers ### 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).
----
[oai wiki home](https://gitlab.eurecom.fr/oai/openairinterface5g/wikis/home)
[oai softmodem features](FEATURE_SET.md)
[oai softmodem build procedure](BUILD.md)
There used to be docker deployment with L2sim that was run in the CI. Since L2
simulator does not work anymore, it has been removed. However, you can see the
old `README.md` from tag `2024.w44`
[here](https://gitlab.eurecom.fr/oai/openairinterface5g/-/blob/2024.w44/ci-scripts/yaml_files/5g_l2sim_tdd/README.md).
In the same directory is a `docker-compose.yaml` file that can be used to run
L2sim.
...@@ -132,7 +132,7 @@ Offload of the channel encoding and decoding to the AMD Xilinx T2 card is enable ...@@ -132,7 +132,7 @@ Offload of the channel encoding and decoding to the AMD Xilinx T2 card is enable
cd ~/openairinterface5g cd ~/openairinterface5g
source oaienv source oaienv
cd cmake_targets/ran_build/build cd cmake_targets/ran_build/build
sudo ./nr-softmodem --sa -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.usrpb210.conf --ldpc-offload-enable --ldpc_offload.dpdk_dev 01:00.0 sudo ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.usrpb210.conf --ldpc-offload-enable --ldpc_offload.dpdk_dev 01:00.0
``` ```
# Limitations # Limitations
......
...@@ -106,18 +106,18 @@ docker compose up -d ...@@ -106,18 +106,18 @@ docker compose up -d
### USRP B210 ### USRP B210
```bash ```bash
cd ~/openairinterface5g/cmake_targets/ran_build/build cd ~/openairinterface5g/cmake_targets/ran_build/build
sudo ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.usrpb210.conf --sa -E --continuous-tx sudo ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.usrpb210.conf -E --continuous-tx
``` ```
### USRP N300 ### USRP N300
```bash ```bash
cd ~/openairinterface5g/cmake_targets/ran_build/build cd ~/openairinterface5g/cmake_targets/ran_build/build
sudo ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band77.fr1.273PRB.2x2.usrpn300.conf --sa --usrp-tx-thread-config 1 sudo ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band77.fr1.273PRB.2x2.usrpn300.conf --usrp-tx-thread-config 1
``` ```
### USRP X300 ### USRP X300
```bash ```bash
cd ~/openairinterface5g/cmake_targets/ran_build/build cd ~/openairinterface5g/cmake_targets/ran_build/build
sudo ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band77.fr1.273PRB.2x2.usrpn300.conf --sa --usrp-tx-thread-config 1 -E --continuous-tx sudo ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band77.fr1.273PRB.2x2.usrpn300.conf --usrp-tx-thread-config 1 -E --continuous-tx
``` ```
# 5. Run UE # 5. Run UE
...@@ -193,7 +193,39 @@ sudo ethtool -G enp1s0f0 tx 4096 rx 4096 ...@@ -193,7 +193,39 @@ sudo ethtool -G enp1s0f0 tx 4096 rx 4096
- You can also reduce the number of LDPC decoder iterations, which will make the LDPC decoder take less time: `--L1s.[0].max_ldpc_iterations 4`. - You can also reduce the number of LDPC decoder iterations, which will make the LDPC decoder take less time: `--L1s.[0].max_ldpc_iterations 4`.
## 6.3 Uplink issues related with noise on the DC carriers ## 6.3 Uplink issues related with noise on the DC carriers
- There is noise on the DC carriers on N300 and especially the X300 in UL. To avoid their use or shift them away from the center to use more UL spectrum, use the `--tune-offset <Hz>` command line switch, where `<Hz>` is ideally half the bandwidth, or possibly less.
With devices like the USRP N300 and especially the X300, there is noise in the DC carriers: this can cause uplink PRBs that overlap with the DC carrier to experience interference and increased noise.
There are two possible solution that can be enabled in OAI:
* `--tune-offset`: it consists in shifting away the operational bandwidth to avoid the center frequency
* `ul_prbblacklist`: can be used to define specific PRBs that should not be used for uplink scheduling
A spectrum clean from the noisy PRBs will eventually result in an enhanced UL throughput.
Using `--tune-offset`, `ul_prbblacklist` or none at all is depending on the combination of the USRP model, the operational bandwidth configuration and the bandwidth of the daughterboard.
There are two main points to keep in mind:
- USRPs come with various daughterboards, each with its own specific bandwidth (see datasheets).
- Using `--tune-offset` to shift the entire operational bandwidth to avoid the center frequency could exceed the device capabilities: if the shifted operational bandwidth falls entirely within the bandwidth of the daughterboard, than `--tune-offset` is sufficient, otherwise `--tune-offset` is ineffective and `ul_prbblacklist` is needed.
The option `ul_prbblacklist` is more relevant when using high-bandwidth configurations (e.g., 100 MHz) with devices like the USRP N310 or X310: in this scenarios, `--tune-offset` could not be sufficient to get rid of the noisy PRBs in the center frequency entirely, because it is not possible to shift the DC carriers out of the bandwidth (tune offset shall be smaller than half the bandwidth of the board).
## 6.3.1 Tune offset
The value passed to the command line option `--tune-offset <Hz>` will be calling an UHD API. It represents the LO offset frequency in Hz.
The API (tune_request_t class) will send a frequency tuning request (`tx_tune_req`, `rx_tune_req`) to the USRP device, in order to configure the target baseband tx/rx frequency, therefore shifting the tx/rx signal spectrum.
The value passed to this option should be ideally equal to half the operational bandwidth, or possibly less, depending on the bandwidth configuration, and also it shall be lower or equal than half the bandwidth of the board.
A visual representation of the impact of tune-offset with a 120 MHz bandwidth daughterboard:
![Tune_Offset](./images/USRP_tune_offset.png)
## 6.3.2 UL PRBs Blacklist
To use this option, in the configuration file, e.g. 100 MHz bandwidth setup: `ul_prbblacklist = "135,136,137,138"`.
## 6.4 Lower latency on user plane ## 6.4 Lower latency on user plane
- To lower latency on the user plane, you can force the UE to be scheduled constantly in uplink: `--MACRLCs.[0].ulsch_max_frame_inactivity 0` . - To lower latency on the user plane, you can force the UE to be scheduled constantly in uplink: `--MACRLCs.[0].ulsch_max_frame_inactivity 0` .
...@@ -97,24 +97,24 @@ docker compose up -d ...@@ -97,24 +97,24 @@ docker compose up -d
### USRP B210 ### USRP B210
```bash ```bash
cd ~/openairinterface5g/cmake_targets/ran_build/build cd ~/openairinterface5g/cmake_targets/ran_build/build
sudo ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.usrpb210.conf --gNBs.[0].min_rxtxtime 6 --sa -E --continuous-tx sudo ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.usrpb210.conf --gNBs.[0].min_rxtxtime 6 -E --continuous-tx
``` ```
### USRP N300 ### USRP N300
```bash ```bash
cd ~/openairinterface5g/cmake_targets/ran_build/build cd ~/openairinterface5g/cmake_targets/ran_build/build
sudo ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band77.fr1.273PRB.2x2.usrpn300.conf --gNBs.[0].min_rxtxtime 6 --sa --usrp-tx-thread-config 1 sudo ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band77.fr1.273PRB.2x2.usrpn300.conf --gNBs.[0].min_rxtxtime 6 --usrp-tx-thread-config 1
``` ```
### USRP X300 ### USRP X300
```bash ```bash
cd ~/openairinterface5g/cmake_targets/ran_build/build cd ~/openairinterface5g/cmake_targets/ran_build/build
sudo ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band77.fr1.273PRB.2x2.usrpn300.conf --gNBs.[0].min_rxtxtime 6 --sa --usrp-tx-thread-config 1 -E --continuous-tx sudo ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band77.fr1.273PRB.2x2.usrpn300.conf --gNBs.[0].min_rxtxtime 6 --usrp-tx-thread-config 1 -E --continuous-tx
``` ```
### RFsimulator ### RFsimulator
```bash ```bash
cd ~/openairinterface5g/cmake_targets/ran_build/build cd ~/openairinterface5g/cmake_targets/ran_build/build
sudo ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.usrpb210.conf --gNBs.[0].min_rxtxtime 6 --rfsim --sa sudo ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.usrpb210.conf --gNBs.[0].min_rxtxtime 6 --rfsim
``` ```
### RFsimulator in FR2 ### RFsimulator in FR2
...@@ -134,7 +134,7 @@ Important notes: ...@@ -134,7 +134,7 @@ Important notes:
Run OAI nrUE with USRP B210 Run OAI nrUE with USRP B210
```bash ```bash
cd ~/openairinterface5g/cmake_targets/ran_build/build cd ~/openairinterface5g/cmake_targets/ran_build/build
sudo ./nr-uesoftmodem -r 106 --numerology 1 --band 78 -C 3619200000 --ue-fo-compensation --sa -E --uicc0.imsi 001010000000001 sudo ./nr-uesoftmodem -r 106 --numerology 1 --band 78 -C 3619200000 --ue-fo-compensation -E --uicc0.imsi 001010000000001
``` ```
### RFsimulator ### RFsimulator
...@@ -145,7 +145,7 @@ Important notes: ...@@ -145,7 +145,7 @@ Important notes:
Run OAI nrUE with RFsimulator Run OAI nrUE with RFsimulator
```bash ```bash
cd ~/openairinterface5g/cmake_targets/ran_build/build cd ~/openairinterface5g/cmake_targets/ran_build/build
sudo ./nr-uesoftmodem -r 106 --numerology 1 --band 78 -C 3619200000 --sa --uicc0.imsi 001010000000001 --rfsim sudo ./nr-uesoftmodem -r 106 --numerology 1 --band 78 -C 3619200000 --uicc0.imsi 001010000000001 --rfsim
``` ```
### RFsimulator in FR2 ### RFsimulator in FR2
...@@ -156,7 +156,7 @@ Important notes: ...@@ -156,7 +156,7 @@ Important notes:
Run OAI nrUE with RFsimulator in FR2 Run OAI nrUE with RFsimulator in FR2
```bash ```bash
cd ~/openairinterface5g/cmake_targets/ran_build/build cd ~/openairinterface5g/cmake_targets/ran_build/build
sudo ./nr-uesoftmodem -r 32 --numerology 3 --band 257 -C 27533280000 --sa --uicc0.imsi 001010000000001 --ssb 72 --rfsim sudo ./nr-uesoftmodem -r 32 --numerology 3 --band 257 -C 27533280000 --uicc0.imsi 001010000000001 --ssb 72 --rfsim
``` ```
### Connection to an NG-Core ### Connection to an NG-Core
...@@ -188,7 +188,7 @@ The UE configuration must match the one of the network's AMF. The nrUE can conne ...@@ -188,7 +188,7 @@ The UE configuration must match the one of the network's AMF. The nrUE can conne
When running the `nr-uesoftmodem`, one can specify the nrUE configuration file using the `-O` option. E.g.: When running the `nr-uesoftmodem`, one can specify the nrUE configuration file using the `-O` option. E.g.:
```bash ```bash
sudo ./nr-uesoftmodem --rfsim --rfsimulator.serveraddr 127.0.0.1 --sa -r 106 --numerology 1 --band 78 -C 3619200000 -O ~/nrue.uicc.conf sudo ./nr-uesoftmodem --rfsim --rfsimulator.serveraddr 127.0.0.1 -r 106 --numerology 1 --band 78 -C 3619200000 -O ~/nrue.uicc.conf
``` ```
The CL option `--uicc0.imsi` can override the IMSI value in the configuration file if necessary (e.g. when running multiple UEs): `--uicc0.imsi 001010000000001`. The CL option `--uicc0.imsi` can override the IMSI value in the configuration file if necessary (e.g. when running multiple UEs): `--uicc0.imsi 001010000000001`.
......
...@@ -821,13 +821,13 @@ xRAN SRS reception is not supported. ...@@ -821,13 +821,13 @@ xRAN SRS reception is not supported.
Run the `nr-softmodem` from the build directory: Run the `nr-softmodem` from the build directory:
```bash ```bash
cd ~/openairinterface5g/cmake_targets/ran_build/build cd ~/openairinterface5g/cmake_targets/ran_build/build
sudo ./nr-softmodem -O <configuration file> --sa --thread-pool <list of non isolated cpus> sudo ./nr-softmodem -O <configuration file> --thread-pool <list of non isolated cpus>
``` ```
**Warning**: Make sure that the configuration file you add after the `-O` option is adapted to your machine, especially to its isolated cores. **Warning**: Make sure that the configuration file you add after the `-O` option is adapted to your machine, especially to its isolated cores.
**Note**: You may run OAI with O-RAN 7.2 Fronthaul without a RU attached (e.g. for benchmarking). **Note**: You may run OAI with O-RAN 7.2 Fronthaul without a RU attached (e.g. for benchmarking).
In such case, you would generate artificial traffic by replacing the `--sa` option by the `--phy-test` option. In such case, you would generate artificial traffic by adding the `--phy-test` option.
You have to set the thread pool option to non-isolated CPUs, since the thread You have to set the thread pool option to non-isolated CPUs, since the thread
pool is used for L1 processing which should not interfere with DPDK threads. pool is used for L1 processing which should not interfere with DPDK threads.
......
...@@ -80,7 +80,6 @@ Legacy unmaintained files: ...@@ -80,7 +80,6 @@ Legacy unmaintained files:
- [How to build images](../docker/README.md) - [How to build images](../docker/README.md)
- [How to run 5G with the RFsimulator from images](../ci-scripts/yaml_files/5g_rfsimulator/README.md) - [How to run 5G with the RFsimulator from images](../ci-scripts/yaml_files/5g_rfsimulator/README.md)
- [How to run 4G with the RFsimulator from images](../ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz/README.md) - [How to run 4G with the RFsimulator from images](../ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz/README.md)
- [How to run 5G with the L2simulator from images](../ci-scripts/yaml_files/5g_l2sim_tdd/README.md)
- [How to run physical simulators in OpenShift](../openshift/README.md) - [How to run physical simulators in OpenShift](../openshift/README.md)
# Libraries # Libraries
......
...@@ -62,6 +62,8 @@ OAI supports different radio heads, the following are tested in the CI: ...@@ -62,6 +62,8 @@ OAI supports different radio heads, the following are tested in the CI:
## NSA setup with COTS UE ## NSA setup with COTS UE
This setup requires an EPC, an OAI eNB and gNB, and a COTS Phone. A dedicated page describe the setup can be found [here](https://gitlab.eurecom.fr/oai/openairinterface5g/wikis/home/gNB-COTS-UE-testing). This setup requires an EPC, an OAI eNB and gNB, and a COTS Phone. A dedicated page describe the setup can be found [here](https://gitlab.eurecom.fr/oai/openairinterface5g/wikis/home/gNB-COTS-UE-testing).
The `--nsa` flag must be used to run gNB in non-standalone mode.
### Launch eNB ### Launch eNB
...@@ -72,29 +74,30 @@ sudo ./lte-softmodem -O ../../../targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7 ...@@ -72,29 +74,30 @@ sudo ./lte-softmodem -O ../../../targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7
### Launch gNB ### Launch gNB
```bash ```bash
sudo ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpn300.conf sudo ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpn300.conf --nsa
``` ```
You should see the X2 messages in Wireshark and at the eNB. You should see the X2 messages in Wireshark and at the eNB.
## SA setup with OAI NR-UE ## SA setup with OAI NR-UE
The sa flag is used to run gNB in standalone mode. The standalone mode is the default mode.
In order to run gNB and UE in standalone mode, the `--sa` flag is needed. It is not necessary to run either the gNB or the UE using the `--sa` flag in the command line for standalone mode.
At the gNB the `--sa` flag does the following: The default (SA) mode does the following:
- The RRC encodes SIB1 according to the configuration file and transmits it through NR-BCCH-DL-SCH. - At the gNB:
* The RRC encodes SIB1 according to the configuration file and transmits it through NR-BCCH-DL-SCH.
At the UE the --sa flag will: - At the UE:
- Decode SIB1 and starts the 5G NR Initial Access Procedure for SA: * Decode SIB1 and starts the 5G NR Initial Access Procedure for SA:
1) 5G-NR RRC Connection Setup 1) 5G-NR RRC Connection Setup
2) NAS Authentication and Security 2) NAS Authentication and Security
3) 5G-NR AS Security Procedure 3) 5G-NR AS Security Procedure
4) 5G-NR RRC Reconfiguration 4) 5G-NR RRC Reconfiguration
5) Start Downlink and Uplink Data Transfer 5) Start Downlink and Uplink Data Transfer
Command line parameters for UE in `--sa` mode: Command line parameters for UE in standalone mode:
- `-C` : downlink carrier frequency in Hz (default value 0) - `-C` : downlink carrier frequency in Hz (default value 0)
- `--CO` : uplink frequency offset for FDD in Hz (default value 0) - `--CO` : uplink frequency offset for FDD in Hz (default value 0)
- `--numerology` : numerology index (default value 1) - `--numerology` : numerology index (default value 1)
...@@ -111,8 +114,8 @@ To simplify the configuration for the user testing OAI UE with OAI gNB, the latt ...@@ -111,8 +114,8 @@ To simplify the configuration for the user testing OAI UE with OAI gNB, the latt
You can run this, using USRPs, on two separate machines: You can run this, using USRPs, on two separate machines:
```shell ```shell
sudo ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.usrpb210.conf --gNBs.[0].min_rxtxtime 6 --sa sudo ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.usrpb210.conf --gNBs.[0].min_rxtxtime 6
sudo ./nr-uesoftmodem -r 106 --numerology 1 --band 78 -C 3619200000 --ssb 516 --sa sudo ./nr-uesoftmodem -r 106 --numerology 1 --band 78 -C 3619200000 --ssb 516
``` ```
With the **RFsimulator** (on the same machine), just add the option `--rfsim` to both gNB and NR UE command lines. With the **RFsimulator** (on the same machine), just add the option `--rfsim` to both gNB and NR UE command lines.
...@@ -159,7 +162,7 @@ This option is available for the following combinations of operation modes and g ...@@ -159,7 +162,7 @@ This option is available for the following combinations of operation modes and g
e.g. e.g.
```shell ```shell
sudo ./nr-uesoftmodem --sa -r 106 --numerology 1 --band 78 -C 3319680000 --ue-nb-ant-tx 2 --ue-nb-ant-rx 2 --uecap_file /opt/oai-nr-ue/etc/uecap.xml sudo ./nr-uesoftmodem -r 106 --numerology 1 --band 78 -C 3319680000 --ue-nb-ant-tx 2 --ue-nb-ant-rx 2 --uecap_file /opt/oai-nr-ue/etc/uecap.xml
``` ```
## How to run a NTN configuration ## How to run a NTN configuration
...@@ -257,7 +260,7 @@ To enable this feature, the `disable_harq` flag has to be added to the gNB conf ...@@ -257,7 +260,7 @@ To enable this feature, the `disable_harq` flag has to be added to the gNB conf
So with these modifications to the file `targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band66.fr1.25PRB.usrpx300.conf` an example gNB command for FDD, 5 MHz BW, 15 kHz SCS, transparent GEO satellite 5G NR NTN is this: So with these modifications to the file `targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band66.fr1.25PRB.usrpx300.conf` an example gNB command for FDD, 5 MHz BW, 15 kHz SCS, transparent GEO satellite 5G NR NTN is this:
``` ```
cd cmake_targets cd cmake_targets
sudo ./ran_build/build/nr-softmodem -O ../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band66.fr1.25PRB.usrpx300.conf --sa --rfsim --rfsimulator.prop_delay 238.74 sudo ./ran_build/build/nr-softmodem -O ../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band66.fr1.25PRB.usrpx300.conf --rfsim --rfsimulator.prop_delay 238.74
``` ```
To configure NTN gNB with 32 HARQ processes in downlink and uplink, add these settings in conf files under section `gNBs.[0]` To configure NTN gNB with 32 HARQ processes in downlink and uplink, add these settings in conf files under section `gNBs.[0]`
...@@ -276,7 +279,7 @@ To simulate a LEO satellite channel model with rfsimulator in UL (DL is simulate ...@@ -276,7 +279,7 @@ To simulate a LEO satellite channel model with rfsimulator in UL (DL is simulate
So with these modifications to the file `targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band66.fr1.25PRB.usrpx300.conf` an example gNB command for FDD, 5 MHz BW, 15 kHz SCS, trasparent LEO satellite 5G NR NTN is this: So with these modifications to the file `targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band66.fr1.25PRB.usrpx300.conf` an example gNB command for FDD, 5 MHz BW, 15 kHz SCS, trasparent LEO satellite 5G NR NTN is this:
``` ```
cd cmake_targets cd cmake_targets
sudo ./ran_build/build/nr-softmodem -O ../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band66.fr1.25PRB.usrpx300.conf --sa --rfsim --rfsimulator.prop_delay 20 sudo ./ran_build/build/nr-softmodem -O ../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band66.fr1.25PRB.usrpx300.conf --rfsim --rfsimulator.prop_delay 20
``` ```
### NR UE ### NR UE
...@@ -288,7 +291,7 @@ At UE side, there are two main parameters to cope with the large NTN propagation ...@@ -288,7 +291,7 @@ At UE side, there are two main parameters to cope with the large NTN propagation
So an example NR UE command for FDD, 5MHz BW, 15 kHz SCS, transparent GEO satellite 5G NR NTN is this: So an example NR UE command for FDD, 5MHz BW, 15 kHz SCS, transparent GEO satellite 5G NR NTN is this:
``` ```
cd cmake_targets cd cmake_targets
sudo ./ran_build/build/nr-uesoftmodem --band 66 -C 2152680000 --CO -400000000 -r 25 --numerology 0 --ssb 48 --sa --rfsim --rfsimulator.prop_delay 238.74 --ntn-koffset 478 --ntn-ta-common 477.48 sudo ./ran_build/build/nr-uesoftmodem --band 66 -C 2152680000 --CO -400000000 -r 25 --numerology 0 --ssb 48 --rfsim --rfsimulator.prop_delay 238.74 --ntn-koffset 478 --ntn-ta-common 477.48
``` ```
For LEO satellites a third parameter specifying the NTN propagation delay drift has ben added, ta-CommonDrift. For LEO satellites a third parameter specifying the NTN propagation delay drift has ben added, ta-CommonDrift.
...@@ -298,7 +301,7 @@ Also, to perform an autonomous TA update based on the DL drift, the boolean para ...@@ -298,7 +301,7 @@ Also, to perform an autonomous TA update based on the DL drift, the boolean para
So an example NR UE command for FDD, 5MHz BW, 15 kHz SCS, transparent LEO satellite 5G NR NTN is this: So an example NR UE command for FDD, 5MHz BW, 15 kHz SCS, transparent LEO satellite 5G NR NTN is this:
``` ```
cd cmake_targets cd cmake_targets
sudo ./ran_build/build/nr-uesoftmodem --band 66 -C 2152680000 --CO -400000000 -r 25 --numerology 0 --ssb 48 --sa --rfsim --rfsimulator.prop_delay 20 --rfsimulator.options chanmod -O ../targets/PROJECTS/GENERIC-NR-5GC/CONF/channelmod_rfsimu_LEO_satellite.conf --time-sync-I 0.2 --ntn-koffset 40 --ntn-ta-common 37.74 --ntn-ta-commondrift -50 --autonomous-ta sudo ./ran_build/build/nr-uesoftmodem --band 66 -C 2152680000 --CO -400000000 -r 25 --numerology 0 --ssb 48 --rfsim --rfsimulator.prop_delay 20 --rfsimulator.options chanmod -O ../targets/PROJECTS/GENERIC-NR-5GC/CONF/channelmod_rfsimu_LEO_satellite.conf --time-sync-I 0.2 --ntn-koffset 40 --ntn-ta-common 37.74 --ntn-ta-commondrift -50 --autonomous-ta
``` ```
# Specific OAI modes # Specific OAI modes
......
...@@ -42,10 +42,10 @@ Each dedicated BWP must have: ...@@ -42,10 +42,10 @@ Each dedicated BWP must have:
## gNB command: ## gNB command:
``` ```
sudo ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.usrpb210.conf --gNBs.[0].min_rxtxtime 6 --rfsim --sa sudo ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.usrpb210.conf --gNBs.[0].min_rxtxtime 6 --rfsim
``` ```
## UE command: ## UE command:
``` ```
sudo ./nr-uesoftmodem -r 106 --numerology 1 --band 78 -C 3619200000 --rfsim --sa --uicc0.imsi 208990000000001 --rfsimulator.serveraddr 127.0.0.1 sudo ./nr-uesoftmodem -r 106 --numerology 1 --band 78 -C 3619200000 --rfsim --uicc0.imsi 208990000000001 --rfsimulator.serveraddr 127.0.0.1
``` ```
...@@ -132,11 +132,6 @@ information on how the images are built. ...@@ -132,11 +132,6 @@ information on how the images are built.
~5G-NR ~5G-NR
- caracal + N310 - caracal + N310
- pure performance test through phy-test scheduler, see command line for more details - pure performance test through phy-test scheduler, see command line for more details
- [RAN-Interop-F1](https://jenkins-oai.eurecom.fr/job/RAN-Interop-F1/)
~5G-NR
- ofqot (DU, 1x UE)
- F1 interoperability: set up connection between Accelleran CU and OAI DU and pass all traffic over F1
- 3rd-party gNB/CU interoperability: set up connection between Accelleran CU and OAI UE and test connectivity
- [RAN-L2-Sim-Test-4G](https://jenkins-oai.eurecom.fr/job/RAN-L2-Sim-Test-4G/) - [RAN-L2-Sim-Test-4G](https://jenkins-oai.eurecom.fr/job/RAN-L2-Sim-Test-4G/)
~4G-LTE ~4G-LTE
- obelix (eNB, 1x UE, OAI EPC) - obelix (eNB, 1x UE, OAI EPC)
...@@ -244,10 +239,10 @@ steps look like this: ...@@ -244,10 +239,10 @@ steps look like this:
`ci-scripts/conf_files/gnb.sa.band78.106prb.rfsim.conf` (note that the path `ci-scripts/conf_files/gnb.sa.band78.106prb.rfsim.conf` (note that the path
is relative to the directory in which the docker-compose file is located). is relative to the directory in which the docker-compose file is located).
Further, an environment variable `USE_ADDITIONAL_OPTIONS` is declared, Further, an environment variable `USE_ADDITIONAL_OPTIONS` is declared,
referencing the relevant options `--sa -E --rfsim` (you can ignore logging referencing the relevant options `-E --rfsim` (you can ignore logging
options). You would therefore run the gNB from source like this: options). You would therefore run the gNB from source like this:
``` ```
sudo ./cmake_targets/ran_build/build/nr-softmodem -O ci-scripts/conf_files/gnb.sa.band78.106prb.rfsim.conf --sa -E --rfsim sudo ./cmake_targets/ran_build/build/nr-softmodem -O ci-scripts/conf_files/gnb.sa.band78.106prb.rfsim.conf -E --rfsim
``` ```
To run this on your local machine, assuming you have a 5GC installed, you To run this on your local machine, assuming you have a 5GC installed, you
might need to change IP information in the config to match your core. might need to change IP information in the config to match your core.
......
...@@ -220,7 +220,7 @@ The **-E** option is **NOT supported** when using a a N300 USRP ...@@ -220,7 +220,7 @@ The **-E** option is **NOT supported** when using a a N300 USRP
Execute: Execute:
``` ```
~/openairinterface5g/cmake_targets/ran_build/build$ sudo ./nr-softmodem -O **YOUR_GNB_CONF_FILE** -E | tee **YOUR_LOG_FILE** ~/openairinterface5g/cmake_targets/ran_build/build$ sudo ./nr-softmodem -O **YOUR_GNB_CONF_FILE** -E --nsa | tee **YOUR_LOG_FILE**
``` ```
......
OpenAirInterface Cross-Compiler User Guide: explains how to build OAI for ARM64
(using the instruction set aarch64).
[[_TOC_]] [[_TOC_]]
# Environment
# OpenAirInterface Cross-Compiler User Guide Tested on Ubuntu 22. Newer version of Ubuntu should work as well, please file a
bug report if not (Gitlab Issues page).
## Environment You should be able to compile OAI on the host (i.e., for x86). To do so,
install the dependencies, if not done already:
- OS: ubuntu 22.04 ```shell
cmake_targets/build_oai -I
```
### Set up the environment # Install ARM64 dependencies
Set up for install the package for aarch64. Set up for install the package for ARM64.
```shell ```shell
sudo dpkg --add-architecture arm64 sudo dpkg --add-architecture arm64
...@@ -32,7 +40,6 @@ sudo apt install -y gcc-11-aarch64-linux-gnu \ ...@@ -32,7 +40,6 @@ sudo apt install -y gcc-11-aarch64-linux-gnu \
g++-11-aarch64-linux-gnu g++-11-aarch64-linux-gnu
sudo apt-get install -y \ sudo apt-get install -y \
libatlas-base-dev:arm64 \
libblas-dev:arm64 \ libblas-dev:arm64 \
libc6-dev-i386 \ libc6-dev-i386 \
liblapack-dev:arm64 \ liblapack-dev:arm64 \
...@@ -47,21 +54,12 @@ sudo apt-get install -y \ ...@@ -47,21 +54,12 @@ sudo apt-get install -y \
``` ```
The above enables apt to download packages for arm64. It also installs The above enables apt to download packages for arm64. It also installs
gcc cross-compilers for aarch64 in version 11. This version needs to match the gcc cross-compilers for ARM64 in version 11. This version needs to match the
versions of gcc defined in the cmake cross-compilation file (`cross-arm.cmake`). versions of gcc defined in the cmake cross-compilation file (`cross-arm.cmake`).
## Install and Build # Build for ARM64
### Install required packages
Use the host compiler to install its dependencies.
```shell ## Build code generation tools for host
cd cmake_targets
./build_oai -I
```
### Build the LDPC generators
Use the x86 compiler to build the `ldpc_generators` and generate the header Use the x86 compiler to build the `ldpc_generators` and generate the header
file in the `ran_build/build` folder. They are necessary during a build for file in the `ran_build/build` folder. They are necessary during a build for
...@@ -78,7 +76,7 @@ cmake ../../.. ...@@ -78,7 +76,7 @@ cmake ../../..
make -j`nproc` ldpc_generators generate_T make -j`nproc` ldpc_generators generate_T
``` ```
### Build the Other Executables for aarch64 ## Build executables for ARM64
Switch to the `ran_build/build-cross` folder to build the target executables Switch to the `ran_build/build-cross` folder to build the target executables
for ARM. The `cross-arm.cmake` file defines some ARM-specific build tools for ARM. The `cross-arm.cmake` file defines some ARM-specific build tools
...@@ -91,7 +89,13 @@ be defined in order to tell cmake where the host tools have been built. ...@@ -91,7 +89,13 @@ be defined in order to tell cmake where the host tools have been built.
cd ../build-cross cd ../build-cross
cmake ../../.. -GNinja -DCMAKE_TOOLCHAIN_FILE=../../../cmake_targets/cross-arm.cmake -DNATIVE_DIR=../build cmake ../../.. -GNinja -DCMAKE_TOOLCHAIN_FILE=../../../cmake_targets/cross-arm.cmake -DNATIVE_DIR=../build
ninja -j`nproc` dlsim ulsim ldpctest polartest smallblocktest nr_pbchsim nr_dlschsim nr_ulschsim nr_dlsim nr_ulsim nr_pucchsim nr_prachsim ninja dlsim ulsim ldpctest polartest smallblocktest nr_pbchsim nr_dlschsim nr_ulschsim nr_dlsim nr_ulsim nr_pucchsim nr_prachsim
ninja -j`nproc` lte-softmodem nr-softmodem nr-cuup oairu lte-uesoftmodem nr-uesoftmodem ninja lte-softmodem nr-softmodem nr-cuup oairu lte-uesoftmodem nr-uesoftmodem
ninja -j`nproc` params_libconfig coding rfsimulator ninja params_libconfig coding rfsimulator
``` ```
# Further information
You can do the above steps using docker, see dockerfiles
`docker/Dockerfile.base.ubuntu22.cross-arm64` and
`docker/Dockerfile.build.ubuntu22.cross-arm64` for more information.
...@@ -48,15 +48,15 @@ done, follow below steps to trigger a handover: ...@@ -48,15 +48,15 @@ done, follow below steps to trigger a handover:
Start the CU including telnet support: Start the CU including telnet support:
sudo ./nr-softmodem --sa -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb-cu.sa.f1.conf --telnetsrv --telnetsrv.shrmod ci sudo ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb-cu.sa.f1.conf --telnetsrv --telnetsrv.shrmod ci
Start DU0: Start DU0:
sudo ./nr-softmodem --sa --rfsim -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb-du.sa.band78.106prb.rfsim.pci0.conf --rfsimulator.serveraddr 127.0.0.1 sudo ./nr-softmodem --rfsim -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb-du.sa.band78.106prb.rfsim.pci0.conf --rfsimulator.serveraddr 127.0.0.1
Start the UE, and let it connect completely: Start the UE, and let it connect completely:
sudo ./nr-uesoftmodem --sa -C 3450720000 -r 106 --numerology 1 --ssb 516 -O <config> --rfsim --rfsimulator.serveraddr server sudo ./nr-uesoftmodem -C 3450720000 -r 106 --numerology 1 --ssb 516 -O <config> --rfsim --rfsimulator.serveraddr server
Note how the RFsimulator roles have been switched, and RFsim server is at the Note how the RFsimulator roles have been switched, and RFsim server is at the
UE side; _this is important_. Replace `<config>` with the UE configuration UE side; _this is important_. Replace `<config>` with the UE configuration
...@@ -65,7 +65,7 @@ matching your core. If you followed the CN and oaiUE tutorials, you can remove ...@@ -65,7 +65,7 @@ matching your core. If you followed the CN and oaiUE tutorials, you can remove
Once the UE is connected, start DU1: Once the UE is connected, start DU1:
sudo ./nr-softmodem --sa --rfsim -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb-du.sa.band78.106prb.rfsim.pci1.conf --rfsimulator.serveraddr 127.0.0.1 sudo ./nr-softmodem --rfsim -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb-du.sa.band78.106prb.rfsim.pci1.conf --rfsimulator.serveraddr 127.0.0.1
Once DU1 is online, you can trigger a handover by issuing this command Once DU1 is online, you can trigger a handover by issuing this command
......
...@@ -33,7 +33,7 @@ than the value of `--subframes-max` parameter. ...@@ -33,7 +33,7 @@ than the value of `--subframes-max` parameter.
>Recording session example: >Recording session example:
```bash ```bash
./nr-uesoftmodem -O /home/oaitests/mediatek_sim.conf --sa --numerology 1 -r 106 -C 3649440000 --band 78 -E --ue-fo-compensation --device.recplay.subframes-record 1 --device.recplay.subframes-file /home/iqs/oai-nrUE-17042023.dat --device.recplay.use-mmap 1 --device.recplay.subframes-max 30000 ./nr-uesoftmodem -O /home/oaitests/mediatek_sim.conf --numerology 1 -r 106 -C 3649440000 --band 78 -E --ue-fo-compensation --device.recplay.subframes-record 1 --device.recplay.subframes-file /home/iqs/oai-nrUE-17042023.dat --device.recplay.use-mmap 1 --device.recplay.subframes-max 30000
............................................ ............................................
............................................ ............................................
............................................ ............................................
...@@ -54,7 +54,7 @@ options for replay mode are: ...@@ -54,7 +54,7 @@ options for replay mode are:
>Replay mode session example: >Replay mode session example:
```bash ```bash
./nr-uesoftmodem -O /home/oaitests/mediatek_sim.conf --sa --numerology 1 -r 106 -C 3649440000 --band 78 -E --ue-fo-compensation --device.recplay.subframes-replay 1 --device.recplay.subframes-file /home/iqs/oai-nrUE-17042023.dat --device.recplay.use-mmap 1 --device.recplay.subframes-loops 1 ./nr-uesoftmodem -O /home/oaitests/mediatek_sim.conf --numerology 1 -r 106 -C 3649440000 --band 78 -E --ue-fo-compensation --device.recplay.subframes-replay 1 --device.recplay.subframes-file /home/iqs/oai-nrUE-17042023.dat --device.recplay.use-mmap 1 --device.recplay.subframes-loops 1
.................................. ..................................
.................................. ..................................
[HW] Replay iqs from USRP B200 device, bandwidth 4.000000e+07 [HW] Replay iqs from USRP B200 device, bandwidth 4.000000e+07
......
...@@ -43,12 +43,12 @@ RUN /bin/sh oaienv && \ ...@@ -43,12 +43,12 @@ RUN /bin/sh oaienv && \
cd ../build-cross/ && \ cd ../build-cross/ && \
# install missing libyaml-cpp-dev for arm64 # install missing libyaml-cpp-dev for arm64
apt install -y libyaml-cpp-dev:arm64 && \ apt install -y libyaml-cpp-dev:arm64 && \
cmake ../../.. -GNinja \ cmake ../../.. -GNinja -DENABLE_TELNETSRV=ON \
-DCMAKE_TOOLCHAIN_FILE=../../../cmake_targets/cross-arm.cmake -DNATIVE_DIR=../build \ -DCMAKE_TOOLCHAIN_FILE=../../../cmake_targets/cross-arm.cmake -DNATIVE_DIR=../build \
-DCMAKE_C_FLAGS="-Werror" -DCMAKE_CXX_FLAGS="-Werror" && \ -DCMAKE_C_FLAGS="-Werror" -DCMAKE_CXX_FLAGS="-Werror" && \
echo "====== Start of log for cross-build executables ======" && \ echo "====== Start of log for cross-build executables ======" && \
# making always passing so we can analyze the all.txt file # making always passing so we can analyze the all.txt file
ninja dlsim ulsim ldpctest polartest smallblocktest nr_pbchsim nr_dlschsim nr_ulschsim nr_dlsim nr_ulsim nr_pucchsim nr_prachsim lte-softmodem nr-softmodem nr-cuup oairu lte-uesoftmodem nr-uesoftmodem params_libconfig coding rfsimulator > ../../log/all.txt 2>&1; \ ninja dlsim ulsim ldpctest polartest smallblocktest nr_pbchsim nr_dlschsim nr_ulschsim nr_dlsim nr_ulsim nr_pucchsim nr_prachsim lte-softmodem nr-softmodem nr-cuup oairu lte-uesoftmodem nr-uesoftmodem params_libconfig coding rfsimulator telnetsrv > ../../log/all.txt 2>&1; \
# displaying errors and warnings # displaying errors and warnings
grep -E -A3 "warning:|error:" ../../log/all.txt || true && \ grep -E -A3 "warning:|error:" ../../log/all.txt || true && \
# will fail only if string "errors:" is found # will fail only if string "errors:" is found
......
...@@ -243,7 +243,7 @@ services: ...@@ -243,7 +243,7 @@ services:
core: -1 # for core dumps core: -1 # for core dumps
environment: environment:
USE_B2XX: 'yes' USE_B2XX: 'yes'
USE_ADDITIONAL_OPTIONS: --sa --RUs.[0].sdr_addrs serial=30C51D4 --telnetsrv --telnetsrv.shrmod ci --continuous-tx --log_config.global_log_options level,nocolor,time,line_num,function USE_ADDITIONAL_OPTIONS: --RUs.[0].sdr_addrs serial=30C51D4 --telnetsrv --telnetsrv.shrmod ci --continuous-tx --log_config.global_log_options level,nocolor,time,line_num,function
devices: devices:
- /dev/bus/usb/:/dev/bus/usb/ - /dev/bus/usb/:/dev/bus/usb/
volumes: volumes:
......
...@@ -131,7 +131,7 @@ static struct { ...@@ -131,7 +131,7 @@ static struct {
extern double cpuf; extern double cpuf;
void init_eNB(int); void init_eNB();
void stop_eNB(int nb_inst); void stop_eNB(int nb_inst);
int wakeup_tx(PHY_VARS_eNB *eNB, int frame_rx, int subframe_rx, int frame_tx, int subframe_tx, uint64_t timestamp_tx); int wakeup_tx(PHY_VARS_eNB *eNB, int frame_rx, int subframe_rx, int frame_tx, int subframe_tx, uint64_t timestamp_tx);
...@@ -1219,7 +1219,8 @@ void init_eNB_afterRU(void) { ...@@ -1219,7 +1219,8 @@ void init_eNB_afterRU(void) {
} }
void init_eNB(int wait_for_sync) { void init_eNB()
{
int CC_id; int CC_id;
int inst; int inst;
PHY_VARS_eNB *eNB; PHY_VARS_eNB *eNB;
......
...@@ -532,8 +532,8 @@ int main ( int argc, char **argv ) ...@@ -532,8 +532,8 @@ int main ( int argc, char **argv )
printf("RC.nb_L1_inst:%d\n", RC.nb_L1_inst); printf("RC.nb_L1_inst:%d\n", RC.nb_L1_inst);
if (RC.nb_L1_inst > 0) { if (RC.nb_L1_inst > 0) {
printf("Initializing eNB threads wait_for_sync:%d\n", get_softmodem_params()->wait_for_sync); printf("Initializing eNB threads\n");
init_eNB(get_softmodem_params()->wait_for_sync); init_eNB();
} }
for (int x=0; x < RC.nb_L1_inst; x++) for (int x=0; x < RC.nb_L1_inst; x++)
for (int CC_id=0; CC_id<RC.nb_L1_CC[x]; CC_id++) { for (int CC_id=0; CC_id<RC.nb_L1_CC[x]; CC_id++) {
......
...@@ -138,7 +138,7 @@ extern int usrp_tx_thread; ...@@ -138,7 +138,7 @@ extern int usrp_tx_thread;
// In lte-enb.c // In lte-enb.c
extern void stop_eNB(int); extern void stop_eNB(int);
extern void kill_eNB_proc(int inst); extern void kill_eNB_proc(int inst);
extern void init_eNB(int wait_for_sync); extern void init_eNB();
// In lte-ru.c // In lte-ru.c
extern void stop_ru(RU_t *ru); extern void stop_ru(RU_t *ru);
......
...@@ -400,13 +400,8 @@ void term_gNB_Tpool(int inst) { ...@@ -400,13 +400,8 @@ void term_gNB_Tpool(int inst) {
void init_eNB_afterRU(void) { void init_eNB_afterRU(void) {
int inst,ru_id,i,aa; int inst,ru_id,i,aa;
PHY_VARS_gNB *gNB; PHY_VARS_gNB *gNB;
LOG_D(PHY, "%s() RC.nb_nr_inst:%d\n", __FUNCTION__, RC.nb_nr_inst);
if(NFAPI_MODE == NFAPI_MODE_PNF)
RC.nb_nr_inst = 1;
for (inst=0; inst<RC.nb_nr_inst; inst++) { for (inst=0; inst<RC.nb_nr_inst; inst++) {
LOG_D(PHY, "RC.nb_nr_CC[inst:%d]:%p\n", inst, RC.gNB[inst]);
gNB = RC.gNB[inst]; gNB = RC.gNB[inst];
gNB->ldpc_offload_flag = get_softmodem_params()->ldpc_offload_flag; gNB->ldpc_offload_flag = get_softmodem_params()->ldpc_offload_flag;
...@@ -415,7 +410,7 @@ void init_eNB_afterRU(void) { ...@@ -415,7 +410,7 @@ void init_eNB_afterRU(void) {
// map antennas and PRACH signals to gNB RX // map antennas and PRACH signals to gNB RX
if (0) AssertFatal(gNB->num_RU>0,"Number of RU attached to gNB %d is zero\n",gNB->Mod_id); if (0) AssertFatal(gNB->num_RU>0,"Number of RU attached to gNB %d is zero\n",gNB->Mod_id);
LOG_D(PHY, "Mapping RX ports from %d RUs to gNB %d\n", gNB->num_RU, gNB->Mod_id); LOG_D(NR_PHY, "Mapping RX ports from %d RUs to gNB %d\n", gNB->num_RU, gNB->Mod_id);
for (ru_id=0,aa=0; ru_id<gNB->num_RU; ru_id++) { for (ru_id=0,aa=0; ru_id<gNB->num_RU; ru_id++) {
AssertFatal(gNB->RU_list[ru_id]->common.rxdataF != NULL, "RU %d : common.rxdataF is NULL\n", gNB->RU_list[ru_id]->idx); AssertFatal(gNB->RU_list[ru_id]->common.rxdataF != NULL, "RU %d : common.rxdataF is NULL\n", gNB->RU_list[ru_id]->idx);
...@@ -439,39 +434,41 @@ void init_eNB_afterRU(void) { ...@@ -439,39 +434,41 @@ void init_eNB_afterRU(void) {
} }
void init_gNB(int wait_for_sync) { /**
* @brief Initialize gNB struct in RAN context
int inst; */
PHY_VARS_gNB *gNB; void init_gNB()
{
LOG_I(NR_PHY, "Initializing gNB RAN context: RC.nb_nr_L1_inst = %d \n", RC.nb_nr_L1_inst);
if (RC.gNB == NULL) { if (RC.gNB == NULL) {
RC.gNB = (PHY_VARS_gNB **) calloc(1+RC.nb_nr_L1_inst, sizeof(PHY_VARS_gNB *)); RC.gNB = (PHY_VARS_gNB **)calloc_or_fail(RC.nb_nr_L1_inst, sizeof(PHY_VARS_gNB *));
LOG_D(PHY, "gNB L1 structure RC.gNB allocated @ %p\n", RC.gNB); LOG_D(NR_PHY, "gNB L1 structure RC.gNB allocated @ %p\n", RC.gNB);
} }
for (inst=0; inst<RC.nb_nr_L1_inst; inst++) { for (int inst = 0; inst < RC.nb_nr_L1_inst; inst++) {
// Allocate L1 instance
if (RC.gNB[inst] == NULL) { if (RC.gNB[inst] == NULL) {
RC.gNB[inst] = (PHY_VARS_gNB *) calloc(1, sizeof(PHY_VARS_gNB)); RC.gNB[inst] = (PHY_VARS_gNB *)calloc_or_fail(1, sizeof(PHY_VARS_gNB));
LOG_D(PHY, "[nr-gnb.c] gNB structure RC.gNB[%d] allocated @ %p\n", inst, RC.gNB[inst]); LOG_D(NR_PHY, "[nr-gnb.c] gNB structure RC.gNB[%d] allocated @ %p\n", inst, RC.gNB[inst]);
} }
gNB = RC.gNB[inst]; PHY_VARS_gNB *gNB = RC.gNB[inst];
/*nr_polar_init(&gNB->nrPolar_params, LOG_D(NR_PHY, "Initializing gNB %d\n", inst);
NR_POLAR_PBCH_MESSAGE_TYPE,
NR_POLAR_PBCH_PAYLOAD_BITS, // Init module ID
NR_POLAR_PBCH_AGGREGATION_LEVEL);*/ gNB->Mod_id = inst;
// Register MAC interface module
AssertFatal((gNB->if_inst = NR_IF_Module_init(inst)) != NULL, "Cannot register interface"); AssertFatal((gNB->if_inst = NR_IF_Module_init(inst)) != NULL, "Cannot register interface");
gNB->if_inst->NR_Schedule_response = nr_schedule_response; LOG_I(NR_PHY, "Registered with MAC interface module (%p)\n", gNB->if_inst);
gNB->if_inst->NR_PHY_config_req = nr_phy_config_request;
memset(&gNB->UL_INFO, 0, sizeof(gNB->UL_INFO));
// Set function pointers in MAC IF module
gNB->if_inst->NR_Schedule_response = nr_schedule_response;
gNB->if_inst->NR_PHY_config_req = nr_phy_config_request;
// Clear UL_INFO and set rx/crc indication lists
memset((void *)&gNB->UL_INFO, 0, sizeof(gNB->UL_INFO));
gNB->UL_INFO.rx_ind.pdu_list = gNB->rx_pdu_list; gNB->UL_INFO.rx_ind.pdu_list = gNB->rx_pdu_list;
gNB->UL_INFO.crc_ind.crc_list = gNB->crc_pdu_list; gNB->UL_INFO.crc_ind.crc_list = gNB->crc_pdu_list;
/*gNB->UL_INFO.sr_ind.sr_indication_body.sr_pdu_list = gNB->sr_pdu_list;
gNB->UL_INFO.harq_ind.harq_indication_body.harq_pdu_list = gNB->harq_pdu_list;
gNB->UL_INFO.cqi_ind.cqi_pdu_list = gNB->cqi_pdu_list;
gNB->UL_INFO.cqi_ind.cqi_raw_pdu_list = gNB->cqi_raw_pdu_list;*/
gNB->prach_energy_counter = 0; gNB->prach_energy_counter = 0;
gNB->chest_time = get_softmodem_params()->chest_time; gNB->chest_time = get_softmodem_params()->chest_time;
...@@ -479,7 +476,6 @@ void init_gNB(int wait_for_sync) { ...@@ -479,7 +476,6 @@ void init_gNB(int wait_for_sync) {
} }
} }
void stop_gNB(int nb_inst) { void stop_gNB(int nb_inst) {
for (int inst=0; inst<nb_inst; inst++) { for (int inst=0; inst<nb_inst; inst++) {
LOG_I(PHY,"Killing gNB %d processing threads\n",inst); LOG_I(PHY,"Killing gNB %d processing threads\n",inst);
......
...@@ -1819,7 +1819,7 @@ static void NRRCconfig_RU(configmodule_interface_t *cfg) ...@@ -1819,7 +1819,7 @@ static void NRRCconfig_RU(configmodule_interface_t *cfg)
if (RUParamList.numelt > 0) { if (RUParamList.numelt > 0) {
RC.ru = (RU_t **)malloc(RC.nb_RU*sizeof(RU_t *)); RC.ru = (RU_t **)malloc(RC.nb_RU*sizeof(RU_t *));
RC.ru_mask = (1 << NB_RU) - 1; RC.ru_mask = (1 << RC.nb_RU) - 1;
for (int j = 0; j < RC.nb_RU; j++) { for (int j = 0; j < RC.nb_RU; j++) {
RC.ru[j] = calloc(1, sizeof(*RC.ru[j])); RC.ru[j] = calloc(1, sizeof(*RC.ru[j]));
......
This diff is collapsed.
...@@ -41,7 +41,7 @@ extern uint64_t ulsch_slot_bitmap; ...@@ -41,7 +41,7 @@ extern uint64_t ulsch_slot_bitmap;
extern char *uecap_file; extern char *uecap_file;
// In nr-gnb.c // In nr-gnb.c
extern void init_gNB(int wait_for_sync); extern void init_gNB();
extern void stop_gNB(int); extern void stop_gNB(int);
// In nr-ru.c // In nr-ru.c
......
...@@ -286,7 +286,7 @@ static void *NRUE_phy_stub_standalone_pnf_task(void *arg) ...@@ -286,7 +286,7 @@ static void *NRUE_phy_stub_standalone_pnf_task(void *arg)
LOG_D(NR_MAC, "The received sfn/slot [%d %d] from proxy\n", LOG_D(NR_MAC, "The received sfn/slot [%d %d] from proxy\n",
frame, slot); frame, slot);
if (get_softmodem_params()->sa && mac->mib == NULL) { if (IS_SA_MODE(get_softmodem_params()) && mac->mib == NULL) {
LOG_D(NR_MAC, "We haven't gotten MIB. Lets see if we received it\n"); LOG_D(NR_MAC, "We haven't gotten MIB. Lets see if we received it\n");
nr_ue_dl_indication(&mac->dl_info); nr_ue_dl_indication(&mac->dl_info);
process_queued_nr_nfapi_msgs(mac, sfn_slot); process_queued_nr_nfapi_msgs(mac, sfn_slot);
...@@ -392,7 +392,7 @@ static void UE_synch(void *arg) { ...@@ -392,7 +392,7 @@ static void UE_synch(void *arg) {
ret = sl_nr_slss_search(UE, &syncD->proc, SL_NR_SSB_REPETITION_IN_FRAMES); ret = sl_nr_slss_search(UE, &syncD->proc, SL_NR_SSB_REPETITION_IN_FRAMES);
} else { } else {
nr_get_carrier_frequencies(UE, &dl_carrier, &ul_carrier); nr_get_carrier_frequencies(UE, &dl_carrier, &ul_carrier);
ret = nr_initial_sync(&syncD->proc, UE, 2, get_softmodem_params()->sa, syncD->gscnInfo, syncD->numGscn); ret = nr_initial_sync(&syncD->proc, UE, 2, IS_SA_MODE(get_softmodem_params()), syncD->gscnInfo, syncD->numGscn);
} }
if (ret.cell_detected) { if (ret.cell_detected) {
...@@ -601,7 +601,7 @@ static int UE_dl_preprocessing(PHY_VARS_NR_UE *UE, const UE_nr_rxtx_proc_t *proc ...@@ -601,7 +601,7 @@ static int UE_dl_preprocessing(PHY_VARS_NR_UE *UE, const UE_nr_rxtx_proc_t *proc
if (UE->sl_mode == 2) if (UE->sl_mode == 2)
fp = &UE->SL_UE_PHY_PARAMS.sl_frame_params; fp = &UE->SL_UE_PHY_PARAMS.sl_frame_params;
if (IS_SOFTMODEM_NOS1 || get_softmodem_params()->sa) { if (IS_SOFTMODEM_NOS1 || IS_SA_MODE(get_softmodem_params())) {
// Start synchronization with a target gNB // Start synchronization with a target gNB
if (UE->synch_request.received_synch_request == 1) { if (UE->synch_request.received_synch_request == 1) {
...@@ -1056,7 +1056,7 @@ void init_NR_UE(int nb_inst, char *uecap_file, char *reconfig_file, char *rbconf ...@@ -1056,7 +1056,7 @@ void init_NR_UE(int nb_inst, char *uecap_file, char *reconfig_file, char *rbconf
NR_UE_MAC_INST_t *mac = get_mac_inst(i); NR_UE_MAC_INST_t *mac = get_mac_inst(i);
mac->if_module = nr_ue_if_module_init(i); mac->if_module = nr_ue_if_module_init(i);
AssertFatal(mac->if_module, "can not initialize IF module\n"); AssertFatal(mac->if_module, "can not initialize IF module\n");
if (!get_softmodem_params()->sa || !get_softmodem_params()->sl_mode) { if (!IS_SA_MODE(get_softmodem_params()) || !get_softmodem_params()->sl_mode) {
init_nsa_message(&rrc_inst[i], reconfig_file, rbconfig_file); init_nsa_message(&rrc_inst[i], reconfig_file, rbconfig_file);
nr_rlc_activate_srb0(mac_inst[i].crnti, NULL, send_srb0_rrc); nr_rlc_activate_srb0(mac_inst[i].crnti, NULL, send_srb0_rrc);
} }
......
...@@ -407,6 +407,9 @@ int main(int argc, char **argv) ...@@ -407,6 +407,9 @@ int main(int argc, char **argv)
get_common_options(uniqCfg, SOFTMODEM_5GUE_BIT); get_common_options(uniqCfg, SOFTMODEM_5GUE_BIT);
CONFIG_CLEARRTFLAG(CONFIG_NOEXITONHELP); CONFIG_CLEARRTFLAG(CONFIG_NOEXITONHELP);
softmodem_verify_mode(get_softmodem_params());
#if T_TRACER #if T_TRACER
T_Config_Init(); T_Config_Init();
#endif #endif
...@@ -453,6 +456,7 @@ int main(int argc, char **argv) ...@@ -453,6 +456,7 @@ int main(int argc, char **argv)
init_pdcp(0); init_pdcp(0);
else else
init_pdcp(mode_offset + ue_id_g); init_pdcp(mode_offset + ue_id_g);
nas_init_nrue(NB_UE_INST);
init_NR_UE(NB_UE_INST, get_nrUE_params()->uecap_file, get_nrUE_params()->reconfig_file, get_nrUE_params()->rbconfig_file); init_NR_UE(NB_UE_INST, get_nrUE_params()->uecap_file, get_nrUE_params()->reconfig_file, get_nrUE_params()->rbconfig_file);
...@@ -461,12 +465,6 @@ int main(int argc, char **argv) ...@@ -461,12 +465,6 @@ int main(int argc, char **argv)
get_channel_model_mode(uniqCfg); get_channel_model_mode(uniqCfg);
} }
if (get_softmodem_params()->do_ra)
AssertFatal(get_softmodem_params()->phy_test == 0,"RA and phy_test are mutually exclusive\n");
if (get_softmodem_params()->sa)
AssertFatal(get_softmodem_params()->phy_test == 0,"Standalone mode and phy_test are mutually exclusive\n");
if (!get_softmodem_params()->nsa && get_softmodem_params()->emulate_l1) if (!get_softmodem_params()->nsa && get_softmodem_params()->emulate_l1)
start_oai_nrue_threads(); start_oai_nrue_threads();
...@@ -480,7 +478,7 @@ int main(int argc, char **argv) ...@@ -480,7 +478,7 @@ int main(int argc, char **argv)
NR_UE_MAC_INST_t *mac = get_mac_inst(inst); NR_UE_MAC_INST_t *mac = get_mac_inst(inst);
init_nr_ue_phy_cpu_stats(&UE[CC_id]->phy_cpu_stats); init_nr_ue_phy_cpu_stats(&UE[CC_id]->phy_cpu_stats);
if (get_softmodem_params()->sa || get_softmodem_params()->sl_mode) { // set frame config to initial values from command line if (IS_SA_MODE(get_softmodem_params()) || get_softmodem_params()->sl_mode) { // set frame config to initial values from command line
// and assume that the SSB is centered on the grid // and assume that the SSB is centered on the grid
uint16_t nr_band = get_softmodem_params()->band; uint16_t nr_band = get_softmodem_params()->band;
mac->nr_band = nr_band; mac->nr_band = nr_band;
......
...@@ -174,6 +174,24 @@ void get_common_options(configmodule_interface_t *cfg, uint32_t execmask) ...@@ -174,6 +174,24 @@ void get_common_options(configmodule_interface_t *cfg, uint32_t execmask)
if (stats_disabled) if (stats_disabled)
set_softmodem_optmask(SOFTMODEM_NOSTATS_BIT); set_softmodem_optmask(SOFTMODEM_NOSTATS_BIT);
} }
void softmodem_verify_mode(const softmodem_params_t *p)
{
if (IS_SA_MODE(p)) {
LOG_I(UTIL, "running in SA mode (no --phy-test, --do-ra, --nsa option present)\n");
return;
}
if (p->phy_test)
LOG_I(UTIL, "running in phy-test mode (--phy-test)\n");
if (p->do_ra)
LOG_I(UTIL, "running in do-ra mode (--do-ra)\n");
if (p->nsa)
LOG_I(UTIL, "running in NSA mode (--nsa)\n");
int num_modes = p->phy_test + p->do_ra + p->nsa;
AssertFatal(num_modes == 1, "--phy-test, --do-ra, and --nsa are mutually exclusive\n");
}
void softmodem_printresources(int sig, telnet_printfunc_t pf) { void softmodem_printresources(int sig, telnet_printfunc_t pf) {
struct rusage usage; struct rusage usage;
struct timespec stop; struct timespec stop;
......
This diff is collapsed.
...@@ -46,7 +46,7 @@ Built target ldpc_cl ...@@ -46,7 +46,7 @@ Built target ldpc_cl
At runtime, to successfully use hardware acceleration via OpenCL, you need to install vendor specific packages which deliver the required drivers and tools to make use of their GPU (Nvidia, Intel...) , fpga (Xilinx, Intel) or CPU (Intel, AMD, ARM...) through OpenCL. At runtime, to successfully use hardware acceleration via OpenCL, you need to install vendor specific packages which deliver the required drivers and tools to make use of their GPU (Nvidia, Intel...) , fpga (Xilinx, Intel) or CPU (Intel, AMD, ARM...) through OpenCL.
`./nr-softmodem -O libconfig:gnb.band78.sa.fr1.106PRB.usrpb210.conf:dbgl5 --rfsim --rfsimulator.serveraddr server --sa --log_config.gtpu_log_level info --loader.ldpc.shlibversion _cl` `./nr-softmodem -O libconfig:gnb.band78.sa.fr1.106PRB.usrpb210.conf:dbgl5 --rfsim --rfsimulator.serveraddr server --log_config.gtpu_log_level info --loader.ldpc.shlibversion _cl`
``` ```
------------------------------------------------ ------------------------------------------------
...@@ -81,7 +81,7 @@ At runtime, to successfully use hardware acceleration via OpenCL, you need to in ...@@ -81,7 +81,7 @@ At runtime, to successfully use hardware acceleration via OpenCL, you need to in
----------------------------------------------------------------- -----------------------------------------------------------------
``` ```
`./nr-uesoftmodem -r 106 --numerology 1 --band 78 -C 3619200000 --rfsim --sa -O libconfig:/usr/local/oai/conf/nrue_sim.conf:dbgl5 --loader.ldpc.shlibversion _cl --log_config.hw_log_level info` `./nr-uesoftmodem -r 106 --numerology 1 --band 78 -C 3619200000 --rfsim -O libconfig:/usr/local/oai/conf/nrue_sim.conf:dbgl5 --loader.ldpc.shlibversion _cl --log_config.hw_log_level info`
``` ```
............................................................ ............................................................
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment