Commit b99e8567 authored by Robert Schmidt's avatar Robert Schmidt

Merge branch 'integration_2024_w09' into 'develop'

Integration: 2024.w09

See merge request oai/openairinterface5g!2593

* !2558 Fixed for the PRB allocation issue assert in DLSCH scheduler
* !2562 Fix FR2 SSB start subcarrier
* !2582 BugFix "PDCP: Handle sdap header."
* !2584 NGAP: Fix byte order of NSSAI SD
* !2590 T tracer: textlog: remove GUI code
* !2572 Harmonize computation of RA-RNTI
* !2577 Fix name clashes between OAI and E2 Agent
* !2545 E1 Re-establishment
* !2553 fix issues related to tx timing advance for HW RF board unpaired RX/TX timestaps and for 5G UE TA algorithm
* !2571 Add SDAP reconfiguration, fixes, and documentation updates
* !2576 RFSIM: cleanup and documentation
* !2586 Better dci decoding
* !2596 CI: maintenance/stability fixes
* !2601 CI: use tini for container process mgmt, describe core dump recovery
* !2589 gNB: increase some configuration defaults
* !2521 CI: Modifs of UndeployObject - log collection
parents c99db698 543250e9
...@@ -1436,8 +1436,7 @@ target_link_libraries(L2 PRIVATE asn1_lte_rrc_hdrs asn1_nr_rrc_hdrs) ...@@ -1436,8 +1436,7 @@ target_link_libraries(L2 PRIVATE asn1_lte_rrc_hdrs asn1_nr_rrc_hdrs)
if(E2_AGENT) if(E2_AGENT)
target_link_libraries(L2 PUBLIC e2_agent e2_agent_arg e2_ran_func_du_cucp_cuup) target_link_libraries(L2 PUBLIC e2_agent e2_agent_arg e2_ran_func_du_cucp_cuup)
target_compile_definitions(L2 PRIVATE E2_AGENT) target_compile_definitions(L2 PRIVATE ${E2AP_VERSION} ${KPM_VERSION} E2_AGENT)
target_compile_definitions(L2 PRIVATE ${E2AP_VERSION} ${KPM_VERSION})
endif() endif()
...@@ -1463,8 +1462,7 @@ target_link_libraries(e1_if PRIVATE asn1_nr_rrc_hdrs asn1_lte_rrc_hdrs asn1_f1ap ...@@ -1463,8 +1462,7 @@ target_link_libraries(e1_if PRIVATE asn1_nr_rrc_hdrs asn1_lte_rrc_hdrs asn1_f1ap
target_link_libraries(L2_NR PRIVATE f1ap x2ap s1ap ngap nr_rrc e1ap nr_rlc) target_link_libraries(L2_NR PRIVATE f1ap x2ap s1ap ngap nr_rrc e1ap nr_rlc)
if(E2_AGENT) if(E2_AGENT)
target_link_libraries(L2_NR PUBLIC e2_agent e2_agent_arg e2_ran_func_du_cucp_cuup) target_link_libraries(L2_NR PUBLIC e2_agent e2_agent_arg e2_ran_func_du_cucp_cuup)
target_compile_definitions(L2_NR PRIVATE ${E2AP_VERSION} ${KPM_VERSION}) target_compile_definitions(L2_NR PRIVATE ${E2AP_VERSION} ${KPM_VERSION} E2_AGENT)
target_compile_definitions(L2_NR PRIVATE E2_AGENT)
endif() endif()
add_library(L2_LTE_NR add_library(L2_LTE_NR
...@@ -1983,8 +1981,7 @@ target_link_libraries(lte-softmodem PRIVATE ${T_LIB}) ...@@ -1983,8 +1981,7 @@ target_link_libraries(lte-softmodem PRIVATE ${T_LIB})
target_link_libraries(lte-softmodem PRIVATE asn1_nr_rrc_hdrs asn1_lte_rrc_hdrs) target_link_libraries(lte-softmodem PRIVATE asn1_nr_rrc_hdrs asn1_lte_rrc_hdrs)
if(E2_AGENT) if(E2_AGENT)
target_compile_definitions(lte-softmodem PRIVATE E2_AGENT) target_compile_definitions(lte-softmodem PRIVATE ${E2AP_VERSION} ${KPM_VERSION} E2_AGENT)
target_compile_definitions(lte-softmodem PRIVATE ${E2AP_VERSION} ${KPM_VERSION})
endif() endif()
add_executable(oairu add_executable(oairu
...@@ -2082,7 +2079,7 @@ target_link_libraries(nr-softmodem PRIVATE ${T_LIB}) ...@@ -2082,7 +2079,7 @@ target_link_libraries(nr-softmodem PRIVATE ${T_LIB})
target_link_libraries(nr-softmodem PRIVATE asn1_nr_rrc_hdrs asn1_lte_rrc_hdrs) target_link_libraries(nr-softmodem PRIVATE asn1_nr_rrc_hdrs asn1_lte_rrc_hdrs)
target_link_libraries(nr-softmodem PRIVATE asn1_nr_rrc_hdrs asn1_lte_rrc_hdrs) target_link_libraries(nr-softmodem PRIVATE asn1_nr_rrc_hdrs asn1_lte_rrc_hdrs)
if(E2_AGENT) if(E2_AGENT)
target_compile_definitions(nr-softmodem PRIVATE ${E2AP_VERSION} ${KPM_VERSION}) target_compile_definitions(nr-softmodem PRIVATE ${E2AP_VERSION} ${KPM_VERSION} E2_AGENT)
endif() endif()
...@@ -2095,10 +2092,6 @@ endif() ...@@ -2095,10 +2092,6 @@ endif()
# force the generation of ASN.1 so that we don't need to wait during the build # force the generation of ASN.1 so that we don't need to wait during the build
target_link_libraries(nr-softmodem PRIVATE target_link_libraries(nr-softmodem PRIVATE
asn1_lte_rrc asn1_nr_rrc asn1_s1ap asn1_ngap asn1_m2ap asn1_m3ap asn1_x2ap asn1_f1ap asn1_lpp) asn1_lte_rrc asn1_nr_rrc asn1_s1ap asn1_ngap asn1_m2ap asn1_m3ap asn1_x2ap asn1_f1ap asn1_lpp)
if(E2_AGENT)
target_compile_definitions(nr-softmodem PRIVATE E2_AGENT)
endif()
add_executable(nr-cuup add_executable(nr-cuup
executables/nr-cuup.c executables/nr-cuup.c
......
...@@ -86,6 +86,12 @@ class Cmd(metaclass=abc.ABCMeta): ...@@ -86,6 +86,12 @@ class Cmd(metaclass=abc.ABCMeta):
return return
class LocalCmd(Cmd): class LocalCmd(Cmd):
def __enter__(self):
return self
def __exit__(self, exc_type, exc_value, exc_traceback):
self.close()
def __init__(self, d = None): def __init__(self, d = None):
self.cwd = d self.cwd = d
if self.cwd is not None: if self.cwd is not None:
...@@ -122,12 +128,40 @@ class LocalCmd(Cmd): ...@@ -122,12 +128,40 @@ class LocalCmd(Cmd):
if src[0] != '/' or tgt[0] != '/': if src[0] != '/' or tgt[0] != '/':
raise Exception('support only absolute file paths!') raise Exception('support only absolute file paths!')
opt = '-r' if recursive else '' opt = '-r' if recursive else ''
self.run(f'cp {opt} {src} {tgt}') return self.run(f'cp {opt} {src} {tgt}').returncode == 0
def copyout(self, src, tgt, recursive=False): def copyout(self, src, tgt, recursive=False):
self.copyin(src, tgt, recursive) return self.copyin(src, tgt, recursive)
def PutFile(client, src, tgt):
success = True
sftp = client.open_sftp()
try:
sftp.put(src, tgt)
except FileNotFoundError as error:
logging.error(f"error while putting {src}: {error}")
success = False
sftp.close()
return success
def GetFile(client, src, tgt):
success = True
sftp = client.open_sftp()
try:
sftp.get(src, tgt)
except FileNotFoundError as error:
logging.error(f"error while getting {src}: {error}")
success = False
sftp.close()
return success
class RemoteCmd(Cmd): class RemoteCmd(Cmd):
def __enter__(self):
return self
def __exit__(self, exc_type, exc_value, exc_traceback):
self.close()
def __init__(self, hostname, d=None): def __init__(self, hostname, d=None):
cIdx = 0 cIdx = 0
logging.getLogger('paramiko').setLevel(logging.ERROR) # prevent spamming through Paramiko logging.getLogger('paramiko').setLevel(logging.ERROR) # prevent spamming through Paramiko
...@@ -193,36 +227,38 @@ class RemoteCmd(Cmd): ...@@ -193,36 +227,38 @@ class RemoteCmd(Cmd):
def getBefore(self): def getBefore(self):
return self.cp.stdout return self.cp.stdout
# if recursive is True, tgt must be a directory (and src is file or directory)
# if recursive is False, tgt and src must be a file name
def copyout(self, src, tgt, recursive=False): def copyout(self, src, tgt, recursive=False):
logging.debug(f"copyout: local:{src} -> remote:{tgt}") logging.debug(f"copyout: local:{src} -> remote:{tgt}")
if recursive: if recursive:
tmpfile = f"{uuid.uuid4()}.tar" tmpfile = f"{uuid.uuid4()}.tar"
abstmpfile = f"/tmp/{tmpfile}" abstmpfile = f"/tmp/{tmpfile}"
cmd = LocalCmd() with LocalCmd() as cmd:
cmd.run(f"tar -cf {abstmpfile} {src}") if cmd.run(f"tar -cf {abstmpfile} {src}").returncode != 0:
sftp = self.client.open_sftp() return False
sftp.put(abstmpfile, abstmpfile) if not PutFile(self.client, abstmpfile, abstmpfile):
sftp.close() return False
cmd.run(f"rm {abstmpfile}") cmd.run(f"rm {abstmpfile}")
self.run(f"mv {abstmpfile} {tgt}; cd {tgt} && tar -xf {tmpfile} && rm {tmpfile}") ret = self.run(f"mv {abstmpfile} {tgt}; cd {tgt} && tar -xf {tmpfile} && rm {tmpfile}")
return ret.returncode == 0
else: else:
sftp = self.client.open_sftp() return PutFile(self.client, src, tgt)
sftp.put(src, tgt)
sftp.close()
# if recursive is True, tgt must be a directory (and src is file or directory)
# if recursive is False, tgt and src must be a file name
def copyin(self, src, tgt, recursive=False): def copyin(self, src, tgt, recursive=False):
logging.debug(f"copyin: remote:{src} -> local:{tgt}") logging.debug(f"copyin: remote:{src} -> local:{tgt}")
if recursive: if recursive:
tmpfile = f"{uuid.uuid4()}.tar" tmpfile = f"{uuid.uuid4()}.tar"
abstmpfile = f"/tmp/{tmpfile}" abstmpfile = f"/tmp/{tmpfile}"
self.run(f"tar -cf {abstmpfile} {src}") if self.run(f"tar -cf {abstmpfile} {src}").returncode != 0:
sftp = self.client.open_sftp() return False
sftp.get(abstmpfile, abstmpfile) if not GetFile(self.client, abstmpfile, abstmpfile):
sftp.close() return False
self.run(f"rm {abstmpfile}") self.run(f"rm {abstmpfile}")
cmd = LocalCmd() with LocalCmd() as cmd:
cmd.run(f"mv {abstmpfile} {tgt}; cd {tgt} && tar -xf {tmpfile} && rm {tmpfile}") ret = cmd.run(f"mv {abstmpfile} {tgt}; cd {tgt} && tar -xf {tmpfile} && rm {tmpfile}")
return ret.returncode == 0
else: else:
sftp = self.client.open_sftp() return GetFile(self.client, src, tgt)
sftp.get(src, tgt)
sftp.close()
...@@ -662,22 +662,26 @@ class Containerize(): ...@@ -662,22 +662,26 @@ class Containerize():
collectInfo['proxy'] = files collectInfo['proxy'] = files
mySSH.command('docker image inspect --format=\'Size = {{.Size}} bytes\' proxy:' + tag, '\$', 5) mySSH.command('docker image inspect --format=\'Size = {{.Size}} bytes\' proxy:' + tag, '\$', 5)
result = re.search('Size *= *(?P<size>[0-9\-]+) *bytes', mySSH.getBefore()) result = re.search('Size *= *(?P<size>[0-9\-]+) *bytes', mySSH.getBefore())
# Cleaning any created tmp volume
mySSH.command(self.cli + ' volume prune --force || true','\$', 15)
mySSH.close()
allImagesSize = {} allImagesSize = {}
if result is not None: if result is not None:
imageSize = float(result.group('size')) / 1000000 imageSize = float(result.group('size')) / 1000000
logging.debug('\u001B[1m proxy size is ' + ('%.0f' % imageSize) + ' Mbytes\u001B[0m') logging.debug('\u001B[1m proxy size is ' + ('%.0f' % imageSize) + ' Mbytes\u001B[0m')
allImagesSize['proxy'] = str(round(imageSize,1)) + ' Mbytes' allImagesSize['proxy'] = str(round(imageSize,1)) + ' Mbytes'
logging.info('\u001B[1m Building L2sim Proxy Image Pass\u001B[0m')
HTML.CreateHtmlTestRow('commit ' + tag, 'OK', CONST.ALL_PROCESSES_OK)
HTML.CreateHtmlNextTabHeaderTestRow(collectInfo, allImagesSize)
return True
else: else:
logging.debug('proxy size is unknown') logging.error('proxy size is unknown')
allImagesSize['proxy'] = 'unknown' allImagesSize['proxy'] = 'unknown'
logging.error('\u001B[1m Build of L2sim proxy failed\u001B[0m')
# Cleaning any created tmp volume HTML.CreateHtmlTestRow('commit ' + tag, 'KO', CONST.ALL_PROCESSES_OK)
mySSH.command(self.cli + ' volume prune --force || true','\$', 15) HTML.CreateHtmlTabFooter(False)
mySSH.close() return False
logging.info('\u001B[1m Building L2sim Proxy Image Pass\u001B[0m')
HTML.CreateHtmlTestRow('commit ' + tag, 'OK', CONST.ALL_PROCESSES_OK)
HTML.CreateHtmlNextTabHeaderTestRow(collectInfo, allImagesSize)
def BuildRunTests(self, HTML): def BuildRunTests(self, HTML):
if self.ranRepository == '' or self.ranBranch == '' or self.ranCommitID == '': if self.ranRepository == '' or self.ranBranch == '' or self.ranCommitID == '':
...@@ -951,12 +955,12 @@ class Containerize(): ...@@ -951,12 +955,12 @@ class Containerize():
if svcName == '': if svcName == '':
logging.warning('no service name given: starting all services in ci-docker-compose.yml!') logging.warning('no service name given: starting all services in ci-docker-compose.yml!')
mySSH.command(f'docker-compose --file ci-docker-compose.yml up -d -- {svcName}', '\$', 30) mySSH.command(f'docker compose --file ci-docker-compose.yml up -d -- {svcName}', '\$', 30)
# Checking Status # Checking Status
grep = '' grep = ''
if svcName != '': grep = f' | grep -A3 {svcName}' if svcName != '': grep = f' | grep -A3 {svcName}'
mySSH.command(f'docker-compose --file ci-docker-compose.yml config {grep}', '\$', 5) mySSH.command(f'docker compose --file ci-docker-compose.yml config {grep}', '\$', 5)
result = re.search('container_name: (?P<container_name>[a-zA-Z0-9\-\_]+)', mySSH.getBefore()) result = re.search('container_name: (?P<container_name>[a-zA-Z0-9\-\_]+)', mySSH.getBefore())
unhealthyNb = 0 unhealthyNb = 0
healthyNb = 0 healthyNb = 0
...@@ -1058,55 +1062,55 @@ class Containerize(): ...@@ -1058,55 +1062,55 @@ class Containerize():
if lIpAddr == '' or lUserName == '' or lPassWord == '' or lSourcePath == '': if lIpAddr == '' or lUserName == '' or lPassWord == '' or lSourcePath == '':
HELP.GenericHelp(CONST.Version) HELP.GenericHelp(CONST.Version)
sys.exit('Insufficient Parameter') sys.exit('Insufficient Parameter')
logging.debug('\u001B[1m Undeploying OAI Object from server: ' + lIpAddr + '\u001B[0m') logging.debug(f'\u001B[1m Undeploying OAI Object from server: {lIpAddr}\u001B[0m')
mySSH = SSH.SSHConnection() mySSH = cls_cmd.getConnection(lIpAddr)
mySSH.open(lIpAddr, lUserName, lPassWord) yamlDir = f'{lSourcePath}/{self.yamlPath[self.eNB_instance]}'
mySSH.run(f'cd {yamlDir}')
mySSH.command('cd ' + lSourcePath + '/' + self.yamlPath[self.eNB_instance], '\$', 5)
svcName = self.services[self.eNB_instance] svcName = self.services[self.eNB_instance]
forceDown = False forceDown = False
if svcName != '': if svcName != '':
logging.warning(f'service name given, but will stop all services in ci-docker-compose.yml!') logging.warning(f'service name given, but will stop all services in ci-docker-compose.yml!')
svcName = '' svcName = ''
mySSH.command(f'docker-compose -f ci-docker-compose.yml config --services', '\$', 5) ret = mySSH.run(f'docker compose -f {yamlDir}/ci-docker-compose.yml config --services')
if ret.returncode != 0:
HTML.CreateHtmlTestRow(RAN.runtime_stats, 'KO', "cannot enumerate running services")
self.exitStatus = 1
return
# first line has command, last line has next command prompt # first line has command, last line has next command prompt
allServices = mySSH.getBefore().split('\r\n')[1:-1] allServices = ret.stdout.splitlines()
services = [] services = []
for s in allServices: for s in allServices:
mySSH.command(f'docker-compose -f ci-docker-compose.yml ps --all -- {s}', '\$', 5, silent=False) # outputs the hash if the container is running
running = mySSH.getBefore().split('\r\n')[2:-1] ret = mySSH.run(f'docker compose -f {yamlDir}/ci-docker-compose.yml ps --all --quiet -- {s}')
running = ret.stdout.splitlines()
logging.debug(f'running services: {running}') logging.debug(f'running services: {running}')
if len(running) > 0: # something is running for that service if ret.stdout != "" and ret.returncode == 0: # something is running for that service
services.append(s) services.append(s)
logging.info(f'stopping services {services}') logging.info(f'stopping services {services}')
mySSH.command(f'docker-compose -f ci-docker-compose.yml stop -t3', '\$', 30) mySSH.run(f'docker compose -f {yamlDir}/ci-docker-compose.yml stop -t3')
time.sleep(5) # give some time to running containers to stop copyin_res = True
for svcName in services: for svcName in services:
# head -n -1 suppresses the final "X exited with status code Y" # head -n -1 suppresses the final "X exited with status code Y"
filename = f'{svcName}-{HTML.testCase_id}.log' filename = f'{svcName}-{HTML.testCase_id}.log'
mySSH.command(f'docker-compose -f ci-docker-compose.yml logs --no-log-prefix -- {svcName} &> {lSourcePath}/cmake_targets/log/{filename}', '\$', 120) mySSH.run(f'docker compose -f {yamlDir}/ci-docker-compose.yml logs --no-log-prefix -- {svcName} &> {lSourcePath}/cmake_targets/log/{filename}')
copyin_res = mySSH.copyin(f'{lSourcePath}/cmake_targets/log/{filename}', f'{filename}') and copyin_res
# when nv-cubb container is available, copy L1 pcap, OAI Aerial pipeline
if 'nv-cubb' in allServices:
mySSH.run(f'cp {lSourcePath}/cmake_targets/share/gnb_nvipc.pcap {lSourcePath}/cmake_targets/gnb_nvipc.pcap')
mySSH.command('docker-compose -f ci-docker-compose.yml down -v', '\$', 5) mySSH.run(f'docker compose -f {yamlDir}/ci-docker-compose.yml down -v')
mySSH.close()
# Analyzing log file! # Analyzing log file!
files = ','.join([f'{s}-{HTML.testCase_id}' for s in services]) if not copyin_res:
if len(services) > 1: HTML.htmleNBFailureMsg='Could not copy logfile(s) to analyze it!'
files = '{' + files + '}'
copyin_res = 0
if len(services) > 0:
copyin_res = mySSH.copyin(lIpAddr, lUserName, lPassWord, f'{lSourcePath}/cmake_targets/log/{files}.log', '.')
if copyin_res == -1:
HTML.htmleNBFailureMsg='Could not copy logfile to analyze it!'
HTML.CreateHtmlTestRow('N/A', 'KO', CONST.ENB_PROCESS_NOLOGFILE_TO_ANALYZE) HTML.CreateHtmlTestRow('N/A', 'KO', CONST.ENB_PROCESS_NOLOGFILE_TO_ANALYZE)
self.exitStatus = 1 self.exitStatus = 1
# use function for UE log analysis, when oai-nr-ue container is used # use function for UE log analysis, when oai-nr-ue container is used
elif 'oai-nr-ue' in services or 'lte_ue0' in services: elif 'oai-nr-ue' in services or 'lte_ue0' in services:
self.exitStatus == 0 self.exitStatus == 0
logging.debug('\u001B[1m Analyzing UE logfile ' + filename + ' \u001B[0m') logging.debug(f'Analyzing UE logfile {filename}')
logStatus = cls_oaicitest.OaiCiTest().AnalyzeLogFile_UE(f'{filename}', HTML, RAN) logStatus = cls_oaicitest.OaiCiTest().AnalyzeLogFile_UE(f'{filename}', HTML, RAN)
if (logStatus < 0): if (logStatus < 0):
fullStatus = False fullStatus = False
...@@ -1125,11 +1129,12 @@ class Containerize(): ...@@ -1125,11 +1129,12 @@ class Containerize():
HTML.CreateHtmlTestRow(RAN.runtime_stats, 'OK', CONST.ALL_PROCESSES_OK) HTML.CreateHtmlTestRow(RAN.runtime_stats, 'OK', CONST.ALL_PROCESSES_OK)
# all the xNB run logs shall be on the server 0 for logCollecting # all the xNB run logs shall be on the server 0 for logCollecting
if self.eNB_serverId[self.eNB_instance] != '0': if self.eNB_serverId[self.eNB_instance] != '0':
mySSH.copyout(self.eNBIPAddress, self.eNBUserName, self.eNBPassword, f'./{files}.log', f'{self.eNBSourceCodePath}/cmake_targets/') mySSH.copyout(f'./*.log', f'{lSourcePath}/cmake_targets/', recursive=True)
if self.exitStatus == 0: if self.exitStatus == 0:
logging.info('\u001B[1m Undeploying OAI Object Pass\u001B[0m') logging.info('\u001B[1m Undeploying OAI Object Pass\u001B[0m')
else: else:
logging.error('\u001B[1m Undeploying OAI Object Failed\u001B[0m') logging.error('\u001B[1m Undeploying OAI Object Failed\u001B[0m')
mySSH.close()
def DeployGenObject(self, HTML, RAN, UE): def DeployGenObject(self, HTML, RAN, UE):
self.exitStatus = 0 self.exitStatus = 0
......
...@@ -171,7 +171,6 @@ MACRLCs = ( ...@@ -171,7 +171,6 @@ MACRLCs = (
remote_n_portd = 2153; remote_n_portd = 2153;
pusch_TargetSNRx10 = 200; pusch_TargetSNRx10 = 200;
pucch_TargetSNRx10 = 200; pucch_TargetSNRx10 = 200;
ulsch_max_frame_inactivity = 1;
} }
); );
......
...@@ -178,7 +178,6 @@ MACRLCs = ( ...@@ -178,7 +178,6 @@ MACRLCs = (
remote_n_portd = 2153; remote_n_portd = 2153;
pusch_TargetSNRx10 = 200; pusch_TargetSNRx10 = 200;
pucch_TargetSNRx10 = 200; pucch_TargetSNRx10 = 200;
ulsch_max_frame_inactivity = 1;
} }
); );
......
...@@ -200,7 +200,6 @@ MACRLCs = ( ...@@ -200,7 +200,6 @@ MACRLCs = (
tr_n_preference = "local_RRC"; tr_n_preference = "local_RRC";
pusch_TargetSNRx10 = 200; pusch_TargetSNRx10 = 200;
pucch_TargetSNRx10 = 200; pucch_TargetSNRx10 = 200;
ulsch_max_frame_inactivity = 0;
} }
); );
......
...@@ -202,7 +202,6 @@ MACRLCs = ( ...@@ -202,7 +202,6 @@ MACRLCs = (
num_cc = 1; num_cc = 1;
tr_s_preference = "local_L1"; tr_s_preference = "local_L1";
tr_n_preference = "local_RRC"; tr_n_preference = "local_RRC";
ulsch_max_frame_inactivity = 0;
} }
); );
......
Active_gNBs = ( "gNB-Eurecom-5GNRBox"); 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 =
( (
{ {
////////// Identification parameters: ////////// Identification parameters:
gNB_ID = 0xe00; gNB_ID = 0xe00;
gNB_name = "gNB-OAI";
cell_type = "CELL_MACRO_GNB";
gNB_name = "gNB-Eurecom-5GNRBox";
// Tracking area code, 0x0000 and 0xfffe are reserved values // Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code = 1; tracking_area_code = 1;
plmn_list = ({mcc = 208; mnc = 99; mnc_length = 2;}); plmn_list = ({ mcc = 208; mnc = 99; mnc_length = 2; snssaiList = ({ sst = 1; }) });
nr_cellid = 12345678L;
tr_s_preference = "local_mac" tr_s_preference = "local_mac"
////////// Physical parameters: ////////// Physical parameters:
sib1_tda = 15;
min_rxtxtime = 6; min_rxtxtime = 6;
servingCellConfigCommon = ( servingCellConfigCommon = (
{ {
#spCellConfigCommon #spCellConfigCommon
physCellId = 0; physCellId = 10;
# downlinkConfigCommon # downlinkConfigCommon
#frequencyInfoDL #frequencyInfoDL
# this is pointA + 23 PRBs@120kHz SCS (same as initial BWP) # this is pointA + 16 PRBs@120kHz SCS (same as initial BWP)
absoluteFrequencySSB = 2071241; absoluteFrequencySSB = 2071387;
dl_frequencyBand = 261; dl_frequencyBand = 261;
# this is 27.900 GHz # this is 27.900 GHz
dl_absoluteFrequencyPointA = 2070833; dl_absoluteFrequencyPointA = 2071001;
#scs-SpecificCarrierList #scs-SpecificCarrierList
dl_offstToCarrier = 0; dl_offstToCarrier = 0;
# subcarrierSpacing # subcarrierSpacing
...@@ -50,7 +51,7 @@ gNBs = ...@@ -50,7 +51,7 @@ gNBs =
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120 # 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialDLBWPsubcarrierSpacing = 3; initialDLBWPsubcarrierSpacing = 3;
#pdcch-ConfigCommon #pdcch-ConfigCommon
initialDLBWPcontrolResourceSetZero = 12; initialDLBWPcontrolResourceSetZero = 1;
initialDLBWPsearchSpaceZero = 0; initialDLBWPsearchSpaceZero = 0;
#uplinkConfigCommon #uplinkConfigCommon
...@@ -85,12 +86,12 @@ gNBs = ...@@ -85,12 +86,12 @@ gNBs =
powerRampingStep = 1; powerRampingStep = 1;
#ra_ReponseWindow #ra_ReponseWindow
#1,2,4,8,10,20,40,80 #1,2,4,8,10,20,40,80
ra_ResponseWindow = 7; ra_ResponseWindow = 5;
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR #ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
#0=oneeighth,1=onefourth,2=half,3=one,4=two,5=four,6=eight,7=sixteen #1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 4; ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 3;
#oneHalf (0..15) 4,8,12,16,...60,64 #oneHalf (0..15) 4,8,12,16,...60,64
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 7; ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 15;
#ra_ContentionResolutionTimer #ra_ContentionResolutionTimer
#(0..7) 8,16,24,32,40,48,56,64 #(0..7) 8,16,24,32,40,48,56,64
ra_ContentionResolutionTimer = 7; ra_ContentionResolutionTimer = 7;
...@@ -101,8 +102,7 @@ gNBs = ...@@ -101,8 +102,7 @@ gNBs =
prach_RootSequenceIndex = 1; prach_RootSequenceIndex = 1;
# SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex # SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex
# #
msg1_SubcarrierSpacing = 3, msg1_SubcarrierSpacing = 3;
# restrictedSetConfig # restrictedSetConfig
# 0=unrestricted, 1=restricted type A, 2=restricted type B # 0=unrestricted, 1=restricted type A, 2=restricted type B
restrictedSetConfig = 0, restrictedSetConfig = 0,
...@@ -119,7 +119,7 @@ gNBs = ...@@ -119,7 +119,7 @@ gNBs =
# ssb_PositionsInBurs_BitmapPR # ssb_PositionsInBurs_BitmapPR
# 1=short, 2=medium, 3=long # 1=short, 2=medium, 3=long
ssb_PositionsInBurst_PR = 3; ssb_PositionsInBurst_PR = 3;
ssb_PositionsInBurst_Bitmap = 0x0001000100010001L; ssb_PositionsInBurst_Bitmap = 1;
# ssb_periodicityServingCell # ssb_periodicityServingCell
# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1 # 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1
...@@ -152,7 +152,6 @@ gNBs = ...@@ -152,7 +152,6 @@ gNBs =
); );
# ------- SCTP definitions # ------- SCTP definitions
SCTP : SCTP :
{ {
...@@ -162,91 +161,58 @@ gNBs = ...@@ -162,91 +161,58 @@ gNBs =
}; };
////////// MME parameters: ////////// AMF parameters:
mme_ip_address = ( { ipv4 = "192.168.18.99"; amf_ip_address = ( { ipv4 = "192.168.71.132";
ipv6 = "192:168:30::17"; ipv6 = "192:168:30::17";
active = "yes"; active = "yes";
preference = "ipv4"; preference = "ipv4";
} }
); );
///X2
enable_x2 = "no";
t_reloc_prep = 1000; /* unit: millisecond */
tx2_reloc_overall = 2000; /* unit: millisecond */
t_dc_prep = 1000; /* unit: millisecond */
t_dc_overall = 2000; /* unit: millisecond */
target_enb_x2_ip_address = (
{ ipv4 = "192.168.18.199";
ipv6 = "192:168:30::17";
preference = "ipv4";
}
);
NETWORK_INTERFACES : NETWORK_INTERFACES :
{ {
GNB_INTERFACE_NAME_FOR_NG_AMF = "eth0";
GNB_INTERFACE_NAME_FOR_S1_MME = "eth0"; GNB_IPV4_ADDRESS_FOR_NG_AMF = "192.168.71.140/24";
GNB_IPV4_ADDRESS_FOR_S1_MME = "192.168.18.198/24"; GNB_INTERFACE_NAME_FOR_NGU = "eth0";
GNB_INTERFACE_NAME_FOR_S1U = "eth0"; GNB_IPV4_ADDRESS_FOR_NGU = "192.168.71.140/24";
GNB_IPV4_ADDRESS_FOR_S1U = "192.168.18.198/24";
GNB_PORT_FOR_S1U = 2152; # Spec 2152 GNB_PORT_FOR_S1U = 2152; # Spec 2152
GNB_IPV4_ADDRESS_FOR_X2C = "192.168.18.198/24";
GNB_PORT_FOR_X2C = 36422; # Spec 36422
}; };
} }
); );
MACRLCs = ( MACRLCs = ({
{ num_cc = 1;
num_cc = 1; tr_s_preference = "local_L1";
tr_s_preference = "local_L1"; tr_n_preference = "local_RRC";
tr_n_preference = "local_RRC"; pusch_TargetSNRx10 = 200;
pusch_TargetSNRx10 = 200; pucch_TargetSNRx10 = 200;
pucch_TargetSNRx10 = 200; });
}
);
L1s = ( L1s = (
{ {
num_cc = 1; num_cc = 1;
tr_n_preference = "local_mac"; tr_n_preference = "local_mac";
ofdm_offset_divisor = 8; #set this to UINT_MAX for offset 0 prach_dtx_threshold = 120;
#pucch0_dtx_threshold = 120;
} }
); );
RUs = ( RUs = ({
{ local_rf = "yes"
local_rf = "yes" nb_tx = 1;
nb_tx = 1; nb_rx = 1;
nb_rx = 1; att_tx = 0;
att_tx = 0; att_rx = 0;
att_rx = 0; sl_ahead = 12;
bands = [7]; bands = [261];
sl_ahead = 12; max_pdschReferenceSignalPower = -27;
max_pdschReferenceSignalPower = -27; eNB_instances = [0];
max_rxgain = 75; });
eNB_instances = [0];
sdr_addrs = "addr=192.168.10.2,second_addr=192.168.20.2";
if_freq = 5124520000L;
clock_src = "external";
time_src = "external";
}
);
rfsimulator: { rfsimulator: {
serveraddr = "server"; serveraddr = "server";
}; };
THREAD_STRUCT = (
{
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
parallel_config = "PARALLEL_RU_L1_TRX_SPLIT";
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
worker_config = "WORKER_ENABLE";
}
);
security = { security = {
# preferred ciphering algorithms # preferred ciphering algorithms
# the first one of the list that an UE supports in chosen # the first one of the list that an UE supports in chosen
...@@ -264,14 +230,6 @@ security = { ...@@ -264,14 +230,6 @@ security = {
drb_integrity = "no"; drb_integrity = "no";
}; };
log_config : log_config: {
{ global_log_level ="info";
global_log_level ="info"; };
hw_log_level ="info";
phy_log_level ="info";
mac_log_level ="info";
rlc_log_level ="info";
pdcp_log_level ="info";
rrc_log_level ="info";
};
...@@ -187,7 +187,6 @@ MACRLCs = ( ...@@ -187,7 +187,6 @@ MACRLCs = (
tr_n_preference = "local_RRC"; tr_n_preference = "local_RRC";
pusch_TargetSNRx10 = 150; pusch_TargetSNRx10 = 150;
pucch_TargetSNRx10 = 200; pucch_TargetSNRx10 = 200;
ulsch_max_frame_inactivity = 0;
} }
); );
......
...@@ -197,8 +197,6 @@ MACRLCs = ( ...@@ -197,8 +197,6 @@ MACRLCs = (
tr_n_preference = "local_RRC"; tr_n_preference = "local_RRC";
pusch_TargetSNRx10 = 180; pusch_TargetSNRx10 = 180;
pucch_TargetSNRx10 = 200; pucch_TargetSNRx10 = 200;
ulsch_max_frame_inactivity = 1;
ul_max_mcs = 16;
} }
); );
......
...@@ -188,7 +188,6 @@ MACRLCs = ( ...@@ -188,7 +188,6 @@ MACRLCs = (
tr_n_preference = "local_RRC"; tr_n_preference = "local_RRC";
#pusch_TargetSNRx10 = 150; #pusch_TargetSNRx10 = 150;
#pucch_TargetSNRx10 = 200; #pucch_TargetSNRx10 = 200;
ulsch_max_frame_inactivity = 0;
dl_max_mcs = 16; # there are retransmissions if more dl_max_mcs = 16; # there are retransmissions if more
} }
); );
......
...@@ -190,7 +190,6 @@ MACRLCs = ( ...@@ -190,7 +190,6 @@ MACRLCs = (
tr_n_preference = "local_RRC"; tr_n_preference = "local_RRC";
pusch_TargetSNRx10 = 220; pusch_TargetSNRx10 = 220;
pucch_TargetSNRx10 = 200; pucch_TargetSNRx10 = 200;
ulsch_max_frame_inactivity = 0;
} }
); );
......
...@@ -184,7 +184,6 @@ MACRLCs = ( ...@@ -184,7 +184,6 @@ MACRLCs = (
pusch_TargetSNRx10 = 200; pusch_TargetSNRx10 = 200;
pucch_TargetSNRx10 = 200; pucch_TargetSNRx10 = 200;
ul_prbblack_SNR_threshold = 10; ul_prbblack_SNR_threshold = 10;
ulsch_max_frame_inactivity = 10;
ul_max_mcs = 9; ul_max_mcs = 9;
} }
); );
......
...@@ -203,7 +203,6 @@ MACRLCs = ( ...@@ -203,7 +203,6 @@ MACRLCs = (
tr_n_preference = "local_RRC"; tr_n_preference = "local_RRC";
pusch_TargetSNRx10 = 220; pusch_TargetSNRx10 = 220;
pucch_TargetSNRx10 = 200; pucch_TargetSNRx10 = 200;
ulsch_max_frame_inactivity = 0;
} }
); );
......
...@@ -204,7 +204,6 @@ MACRLCs = ( ...@@ -204,7 +204,6 @@ MACRLCs = (
tr_n_preference = "local_RRC"; tr_n_preference = "local_RRC";
# pusch_TargetSNRx10 = 200; # pusch_TargetSNRx10 = 200;
# pucch_TargetSNRx10 = 150; # pucch_TargetSNRx10 = 150;
ulsch_max_frame_inactivity = 0;
} }
); );
......
...@@ -186,7 +186,6 @@ MACRLCs = ( ...@@ -186,7 +186,6 @@ MACRLCs = (
tr_n_preference = "local_RRC"; tr_n_preference = "local_RRC";
pusch_TargetSNRx10 = 150; pusch_TargetSNRx10 = 150;
pucch_TargetSNRx10 = 200; pucch_TargetSNRx10 = 200;
ulsch_max_frame_inactivity = 1;
} }
); );
......
...@@ -192,8 +192,6 @@ MACRLCs = ( ...@@ -192,8 +192,6 @@ MACRLCs = (
tr_n_preference = "local_RRC"; tr_n_preference = "local_RRC";
pusch_TargetSNRx10 = 200; pusch_TargetSNRx10 = 200;
pucch_TargetSNRx10 = 200; pucch_TargetSNRx10 = 200;
ulsch_max_frame_inactivity = 10;
ul_max_mcs = 28;
} }
); );
......
...@@ -184,7 +184,6 @@ MACRLCs = ( ...@@ -184,7 +184,6 @@ MACRLCs = (
pusch_TargetSNRx10 = 200; pusch_TargetSNRx10 = 200;
pucch_TargetSNRx10 = 200; pucch_TargetSNRx10 = 200;
ul_prbblack_SNR_threshold = 10; ul_prbblack_SNR_threshold = 10;
ulsch_max_frame_inactivity = 0;
} }
); );
......
...@@ -208,7 +208,6 @@ MACRLCs = ( ...@@ -208,7 +208,6 @@ MACRLCs = (
tr_n_preference = "local_RRC"; tr_n_preference = "local_RRC";
pusch_TargetSNRx10 = 200; pusch_TargetSNRx10 = 200;
pucch_TargetSNRx10 = 200; pucch_TargetSNRx10 = 200;
ulsch_max_frame_inactivity = 1;
} }
); );
......
...@@ -199,7 +199,6 @@ MACRLCs = ( ...@@ -199,7 +199,6 @@ MACRLCs = (
tr_n_preference = "local_RRC"; tr_n_preference = "local_RRC";
pusch_TargetSNRx10 = 200; pusch_TargetSNRx10 = 200;
pucch_TargetSNRx10 = 200; pucch_TargetSNRx10 = 200;
ulsch_max_frame_inactivity = 0;
} }
); );
......
...@@ -186,7 +186,6 @@ MACRLCs = ( ...@@ -186,7 +186,6 @@ MACRLCs = (
pusch_TargetSNRx10 = 200; pusch_TargetSNRx10 = 200;
pucch_TargetSNRx10 = 200; pucch_TargetSNRx10 = 200;
ul_prbblack_SNR_threshold = 10; ul_prbblack_SNR_threshold = 10;
ulsch_max_frame_inactivity = 0;
} }
); );
......
...@@ -12,8 +12,8 @@ Ref : ...@@ -12,8 +12,8 @@ Ref :
feptx_ofdm : 65.0 feptx_ofdm : 65.0
feptx_total : 177.0 feptx_total : 177.0
L1 Tx processing : 700.0 L1 Tx processing : 700.0
DLSCH encoding : 179.0 DLSCH encoding : 226.0
L1 Rx processing : 526.0 L1 Rx processing : 640.0
PUSCH inner-receiver : 400.0 PUSCH inner-receiver : 400.0
Schedule Response : 3.0 Schedule Response : 3.0
DL & UL scheduling timing : 15.0 DL & UL scheduling timing : 15.0
......
...@@ -11,10 +11,10 @@ Ref : ...@@ -11,10 +11,10 @@ Ref :
feptx_prec : 15.0 feptx_prec : 15.0
feptx_ofdm : 35.0 feptx_ofdm : 35.0
feptx_total : 57.0 feptx_total : 57.0
L1 Tx processing : 210.0 L1 Tx processing : 260.0
DLSCH encoding : 137.0 DLSCH encoding : 160.0
L1 Rx processing : 345.0 L1 Rx processing : 420.0
PUSCH inner-receiver : 210.0 PUSCH inner-receiver : 170.0
Schedule Response : 3.0 Schedule Response : 3.0
DL & UL scheduling timing : 8.0 DL & UL scheduling timing : 8.0
UL Indication : 3.0 UL Indication : 3.0
......
...@@ -11,9 +11,9 @@ Ref : ...@@ -11,9 +11,9 @@ Ref :
feptx_prec : 13.0 feptx_prec : 13.0
feptx_ofdm : 33.0 feptx_ofdm : 33.0
feptx_total : 55.0 feptx_total : 55.0
L1 Tx processing : 170.0 L1 Tx processing : 220.0
DLSCH encoding : 118.0 DLSCH encoding : 130.0
L1 Rx processing : 305.0 L1 Rx processing : 387.0
PUSCH inner-receiver : 150.0 PUSCH inner-receiver : 150.0
Schedule Response : 3.0 Schedule Response : 3.0
DL & UL scheduling timing : 6.0 DL & UL scheduling timing : 6.0
......
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
000021 000021
000022 000022
000023 000023
000024
020021 020021
100021 100021
</TestCaseRequestedList> </TestCaseRequestedList>
...@@ -66,6 +67,12 @@ ...@@ -66,6 +67,12 @@
<nb_healthy>14</nb_healthy> <nb_healthy>14</nb_healthy>
</testCase> </testCase>
<testCase id="000024">
<class>Attach_UE</class>
<desc>Attach OAI UE (Wait for IP)</desc>
<id>rfsim5g_ue rfsim5g_ue2 rfsim5g_ue3</id>
</testCase>
<testCase id="020021"> <testCase id="020021">
<class>Ping</class> <class>Ping</class>
<desc>Ping ext-dn from all NR-UEs</desc> <desc>Ping ext-dn from all NR-UEs</desc>
......
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
100021 100021
000021 000021
000022 000022
000023
020021 020021
030021 030021
030022 030022
...@@ -59,6 +60,12 @@ ...@@ -59,6 +60,12 @@
<nb_healthy>8</nb_healthy> <nb_healthy>8</nb_healthy>
</testCase> </testCase>
<testCase id="000023">
<class>Attach_UE</class>
<desc>Attach OAI UE (Wait for IP)</desc>
<id>rfsim5g_ue</id>
</testCase>
<testCase id="020021"> <testCase id="020021">
<class>Ping</class> <class>Ping</class>
<desc>Ping ext-dn from all NR-UEs</desc> <desc>Ping ext-dn from all NR-UEs</desc>
......
...@@ -28,7 +28,6 @@ ...@@ -28,7 +28,6 @@
<TestCaseRequestedList> <TestCaseRequestedList>
111111 111111
100011 100011
000010
000011 000011
000012 000012
000013 000013
...@@ -47,36 +46,26 @@ ...@@ -47,36 +46,26 @@
<images_to_pull>oai-gnb-asan oai-nr-ue-asan</images_to_pull> <images_to_pull>oai-gnb-asan oai-nr-ue-asan</images_to_pull>
</testCase> </testCase>
<testCase id="000010">
<class>DeployGenObject</class>
<desc>Deploy MySql Database</desc>
<yaml_path>yaml_files/5g_fdd_rfsimulator</yaml_path>
<services>mysql</services>
<nb_healthy>1</nb_healthy>
</testCase>
<testCase id="000011"> <testCase id="000011">
<class>DeployGenObject</class> <class>DeployGenObject</class>
<desc>Deploy OAI 5G CoreNetwork</desc> <desc>Deploy OAI 5G CoreNetwork</desc>
<yaml_path>yaml_files/5g_fdd_rfsimulator</yaml_path> <yaml_path>yaml_files/5g_fdd_rfsimulator</yaml_path>
<services>oai-amf oai-smf oai-upf oai-ext-dn</services> <services>mysql oai-amf oai-smf oai-upf oai-ext-dn</services>
<nb_healthy>5</nb_healthy> <nb_healthy>5</nb_healthy>
</testCase> </testCase>
<testCase id="000012"> <testCase id="000012">
<class>DeployGenObject</class> <class>DeployGenObject</class>
<desc>Deploy OAI 5G gNB RF sim SA</desc> <desc>Deploy OAI 5G gNB+UE RF sim SA</desc>
<yaml_path>yaml_files/5g_fdd_rfsimulator</yaml_path> <yaml_path>yaml_files/5g_fdd_rfsimulator</yaml_path>
<services>oai-gnb</services> <services>oai-gnb oai-nr-ue</services>
<nb_healthy>6</nb_healthy> <nb_healthy>7</nb_healthy>
</testCase> </testCase>
<testCase id="000013"> <testCase id="000013">
<class>DeployGenObject</class> <class>Attach_UE</class>
<desc>Deploy OAI 5G NR-UE RF sim SA</desc> <desc>Attach OAI UE (Wait for IP)</desc>
<yaml_path>yaml_files/5g_fdd_rfsimulator</yaml_path> <id>rfsim5g_ue</id>
<services>oai-nr-ue</services>
<nb_healthy>7</nb_healthy>
</testCase> </testCase>
<testCase id="020011"> <testCase id="020011">
......
...@@ -28,7 +28,6 @@ ...@@ -28,7 +28,6 @@
<TestCaseRequestedList> <TestCaseRequestedList>
111111 111111
100001 100001
000000
000001 000001
000002 000002
000003 000003
...@@ -47,36 +46,26 @@ ...@@ -47,36 +46,26 @@
<images_to_pull>oai-gnb-asan oai-nr-ue-asan</images_to_pull> <images_to_pull>oai-gnb-asan oai-nr-ue-asan</images_to_pull>
</testCase> </testCase>
<testCase id="000000">
<class>DeployGenObject</class>
<desc>Deploy MySql Database</desc>
<yaml_path>yaml_files/5g_rfsimulator_24prb</yaml_path>
<services>mysql</services>
<nb_healthy>1</nb_healthy>
</testCase>
<testCase id="000001"> <testCase id="000001">
<class>DeployGenObject</class> <class>DeployGenObject</class>
<desc>Deploy OAI 5G CoreNetwork</desc> <desc>Deploy OAI 5G CoreNetwork</desc>
<yaml_path>yaml_files/5g_rfsimulator_24prb</yaml_path> <yaml_path>yaml_files/5g_rfsimulator_24prb</yaml_path>
<services>oai-amf oai-smf oai-upf oai-ext-dn</services> <services>mysql oai-amf oai-smf oai-upf oai-ext-dn</services>
<nb_healthy>5</nb_healthy> <nb_healthy>5</nb_healthy>
</testCase> </testCase>
<testCase id="000002"> <testCase id="000002">
<class>DeployGenObject</class> <class>DeployGenObject</class>
<desc>Deploy OAI 5G gNB RF sim SA</desc> <desc>Deploy OAI 5G gNB+UE RFsim SA</desc>
<yaml_path>yaml_files/5g_rfsimulator_24prb</yaml_path> <yaml_path>yaml_files/5g_rfsimulator_24prb</yaml_path>
<services>oai-gnb</services> <services>oai-gnb oai-nr-ue</services>
<nb_healthy>6</nb_healthy> <nb_healthy>7</nb_healthy>
</testCase> </testCase>
<testCase id="000003"> <testCase id="000003">
<class>DeployGenObject</class> <class>Attach_UE</class>
<desc>Deploy OAI 5G NR-UE RF sim SA</desc> <desc>Attach OAI UE (Wait for IP)</desc>
<yaml_path>yaml_files/5g_rfsimulator_24prb</yaml_path> <id>rfsim5g_ue</id>
<services>oai-nr-ue</services>
<nb_healthy>7</nb_healthy>
</testCase> </testCase>
<testCase id="020001"> <testCase id="020001">
......
...@@ -28,7 +28,6 @@ ...@@ -28,7 +28,6 @@
<TestCaseRequestedList> <TestCaseRequestedList>
111111 111111
100001 100001
000000
000001 000001
000002 000002
000003 000003
...@@ -47,36 +46,26 @@ ...@@ -47,36 +46,26 @@
<images_to_pull>oai-gnb-asan oai-nr-ue-asan</images_to_pull> <images_to_pull>oai-gnb-asan oai-nr-ue-asan</images_to_pull>
</testCase> </testCase>
<testCase id="000000">
<class>DeployGenObject</class>
<desc>Deploy MySql Database</desc>
<yaml_path>yaml_files/5g_rfsimulator_2x2</yaml_path>
<services>mysql</services>
<nb_healthy>1</nb_healthy>
</testCase>
<testCase id="000001"> <testCase id="000001">
<class>DeployGenObject</class> <class>DeployGenObject</class>
<desc>Deploy OAI 5G CoreNetwork</desc> <desc>Deploy OAI 5G CoreNetwork</desc>
<yaml_path>yaml_files/5g_rfsimulator_2x2</yaml_path> <yaml_path>yaml_files/5g_rfsimulator_2x2</yaml_path>
<services>oai-amf oai-smf oai-upf oai-ext-dn</services> <services>mysql oai-amf oai-smf oai-upf oai-ext-dn</services>
<nb_healthy>5</nb_healthy> <nb_healthy>5</nb_healthy>
</testCase> </testCase>
<testCase id="000002"> <testCase id="000002">
<class>DeployGenObject</class> <class>DeployGenObject</class>
<desc>Deploy OAI 5G gNB RF sim SA</desc> <desc>Deploy OAI 5G gNB+UE RF sim SA</desc>
<yaml_path>yaml_files/5g_rfsimulator_2x2</yaml_path> <yaml_path>yaml_files/5g_rfsimulator_2x2</yaml_path>
<services>oai-gnb</services> <services>oai-gnb oai-nr-ue</services>
<nb_healthy>6</nb_healthy> <nb_healthy>7</nb_healthy>
</testCase> </testCase>
<testCase id="000003"> <testCase id="000003">
<class>DeployGenObject</class> <class>Attach_UE</class>
<desc>Deploy OAI 5G NR-UE RF sim SA</desc> <desc>Attach OAI UE (Wait for IP)</desc>
<yaml_path>yaml_files/5g_rfsimulator_2x2</yaml_path> <id>rfsim5g_ue</id>
<services>oai-nr-ue</services>
<nb_healthy>7</nb_healthy>
</testCase> </testCase>
<testCase id="020001"> <testCase id="020001">
......
...@@ -43,18 +43,16 @@ ...@@ -43,18 +43,16 @@
<testCase id="000020"> <testCase id="000020">
<class>DeployGenObject</class> <class>DeployGenObject</class>
<desc>Deploy OAI-DU</desc> <desc>Deploy OAI-DU+nrUE</desc>
<yaml_path>yaml_files/5g_rfsimulator_accelleran</yaml_path> <yaml_path>yaml_files/5g_rfsimulator_accelleran</yaml_path>
<services>oai-du</services> <services>oai-du oai-nr-ue</services>
<nb_healthy>1</nb_healthy> <nb_healthy>2</nb_healthy>
</testCase> </testCase>
<testCase id="000021"> <testCase id="000021">
<class>DeployGenObject</class> <class>Attach_UE</class>
<desc>Deploy nrUE</desc> <desc>Attach OAI UE (Wait for IP)</desc>
<yaml_path>yaml_files/5g_rfsimulator_accelleran</yaml_path> <id>rfsim5g_ue</id>
<services>oai-nr-ue</services>
<nb_healthy>2</nb_healthy>
</testCase> </testCase>
<testCase id="020021"> <testCase id="020021">
......
...@@ -50,7 +50,7 @@ ...@@ -50,7 +50,7 @@
<class>Custom_Command</class> <class>Custom_Command</class>
<desc>Clean-Up any residual volume</desc> <desc>Clean-Up any residual volume</desc>
<node>localhost</node> <node>localhost</node>
<command>docker volume rm 5g_rfsimulator_fdd_phytest_rrc.config</command> <command>docker volume rm 5g_rfsimulator_fdd_phytest_rrc.config -f</command>
</testCase> </testCase>
<testCase id="000010"> <testCase id="000010">
......
...@@ -22,13 +22,12 @@ ...@@ -22,13 +22,12 @@
--> -->
<testCaseList> <testCaseList>
<htmlTabRef>rfsim-fr2-32prb-5gnr-tdd</htmlTabRef> <htmlTabRef>rfsim-fr2-32prb-5gnr-tdd</htmlTabRef>
<htmlTabName>Monolithic FR2 do-ra gNB</htmlTabName> <htmlTabName>Monolithic FR2 gNB</htmlTabName>
<htmlTabIcon>wrench</htmlTabIcon> <htmlTabIcon>wrench</htmlTabIcon>
<repeatCount>1</repeatCount> <repeatCount>1</repeatCount>
<TestCaseRequestedList> <TestCaseRequestedList>
111111 111111
100001 100001
004000
000000 000000
000001 000001
020001 020001
...@@ -44,42 +43,35 @@ ...@@ -44,42 +43,35 @@
<images_to_pull>oai-gnb-asan oai-nr-ue-asan</images_to_pull> <images_to_pull>oai-gnb-asan oai-nr-ue-asan</images_to_pull>
</testCase> </testCase>
<testCase id="004000">
<class>Custom_Command</class>
<desc>Clean-Up any residual volume</desc>
<node>localhost</node>
<command>docker volume rm 5g_rfsimulator_fr2_32prb_rrc.config</command>
</testCase>
<testCase id="000000"> <testCase id="000000">
<class>DeployGenObject</class> <class>DeployGenObject</class>
<desc>Deploy OAI gNB</desc> <desc>Deploy OAI gNB</desc>
<yaml_path>yaml_files/5g_rfsimulator_fr2_32prb</yaml_path> <yaml_path>yaml_files/5g_rfsimulator_fr2_32prb</yaml_path>
<services>oai-gnb</services> <services>mysql oai-amf oai-smf oai-upf oai-ext-dn</services>
<nb_healthy>1</nb_healthy> <nb_healthy>5</nb_healthy>
</testCase> </testCase>
<testCase id="000001"> <testCase id="000001">
<class>DeployGenObject</class> <class>DeployGenObject</class>
<desc>Deploy OAI NR-UE</desc> <desc>Deploy OAI NR-UE</desc>
<yaml_path>yaml_files/5g_rfsimulator_fr2_32prb</yaml_path> <yaml_path>yaml_files/5g_rfsimulator_fr2_32prb</yaml_path>
<services>oai-nr-ue</services> <services>oai-gnb oai-nr-ue</services>
<nb_healthy>2</nb_healthy> <nb_healthy>7</nb_healthy>
</testCase> </testCase>
<testCase id="020001"> <testCase id="020001">
<class>Ping</class> <class>Ping</class>
<desc>Ping gNB from NR-UE</desc> <desc>Ping ext-dn from NR-UE</desc>
<id>rfsim5g_ue</id> <id>rfsim5g_ue</id>
<ping_args>-c20 -i0.2 10.0.1.1</ping_args> <ping_args>-c 20 -i0.2 192.168.72.135</ping_args>
<ping_packetloss_threshold>0</ping_packetloss_threshold> <ping_packetloss_threshold>0</ping_packetloss_threshold>
</testCase> </testCase>
<testCase id="020002"> <testCase id="020002">
<class>Ping</class> <class>Ping</class>
<desc>Ping NR-UE from gNB</desc> <desc>Ping NR-UE from ext-dn</desc>
<id>rfsim5g_gnb_nos1</id> <id>rfsim5g_ext_dn</id>
<ping_args>-c20 -i0.2 10.0.1.2</ping_args> <ping_args>-c 20 12.1.1.2 -i0.2</ping_args>
<ping_packetloss_threshold>0</ping_packetloss_threshold> <ping_packetloss_threshold>0</ping_packetloss_threshold>
</testCase> </testCase>
...@@ -87,8 +79,8 @@ ...@@ -87,8 +79,8 @@
<class>UndeployGenObject</class> <class>UndeployGenObject</class>
<desc>Undeploy all OAI 5G stack</desc> <desc>Undeploy all OAI 5G stack</desc>
<yaml_path>yaml_files/5g_rfsimulator_fr2_32prb</yaml_path> <yaml_path>yaml_files/5g_rfsimulator_fr2_32prb</yaml_path>
<d_retx_th>0,0,0,0</d_retx_th> <d_retx_th>10,0,0,0</d_retx_th>
<u_retx_th>0,0,0,0</u_retx_th> <u_retx_th>10,0,0,0</u_retx_th>
</testCase> </testCase>
</testCaseList> </testCaseList>
...@@ -26,7 +26,6 @@ ...@@ -26,7 +26,6 @@
<htmlTabIcon>trash</htmlTabIcon> <htmlTabIcon>trash</htmlTabIcon>
<TestCaseRequestedList> <TestCaseRequestedList>
100002 100002
004000
222222 222222
</TestCaseRequestedList> </TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList> <TestCaseExclusionList></TestCaseExclusionList>
...@@ -37,13 +36,6 @@ ...@@ -37,13 +36,6 @@
<yaml_path>yaml_files/5g_rfsimulator_fr2_32prb</yaml_path> <yaml_path>yaml_files/5g_rfsimulator_fr2_32prb</yaml_path>
</testCase> </testCase>
<testCase id="004000">
<class>Custom_Command</class>
<desc>Clean-Up any residual volume</desc>
<node>localhost</node>
<command>docker volume rm 5g_rfsimulator_fr2_32prb_rrc.config</command>
</testCase>
<testCase id="222222"> <testCase id="222222">
<class>Clean_Test_Server_Images</class> <class>Clean_Test_Server_Images</class>
<desc>Clean Test Images on Test Server</desc> <desc>Clean Test Images on Test Server</desc>
......
...@@ -48,7 +48,7 @@ ...@@ -48,7 +48,7 @@
<class>Custom_Command</class> <class>Custom_Command</class>
<desc>Clean-Up any residual volume</desc> <desc>Clean-Up any residual volume</desc>
<node>localhost</node> <node>localhost</node>
<command>docker volume rm 5g_rfsimulator_tdd_dora_rrc.config</command> <command>docker volume rm 5g_rfsimulator_tdd_dora_rrc.config -f</command>
</testCase> </testCase>
<testCase id="000000"> <testCase id="000000">
......
...@@ -28,7 +28,6 @@ ...@@ -28,7 +28,6 @@
<TestCaseRequestedList> <TestCaseRequestedList>
111111 111111
100001 100001
000000
000001 000001
000002 000002
000003 000003
...@@ -47,36 +46,26 @@ ...@@ -47,36 +46,26 @@
<images_to_pull>oai-gnb-asan oai-nr-ue-asan</images_to_pull> <images_to_pull>oai-gnb-asan oai-nr-ue-asan</images_to_pull>
</testCase> </testCase>
<testCase id="000000">
<class>DeployGenObject</class>
<desc>Deploy MySql Database</desc>
<yaml_path>yaml_files/5g_rfsimulator_u0_25prb</yaml_path>
<services>mysql</services>
<nb_healthy>1</nb_healthy>
</testCase>
<testCase id="000001"> <testCase id="000001">
<class>DeployGenObject</class> <class>DeployGenObject</class>
<desc>Deploy OAI 5G CoreNetwork</desc> <desc>Deploy OAI 5G CoreNetwork</desc>
<yaml_path>yaml_files/5g_rfsimulator_u0_25prb</yaml_path> <yaml_path>yaml_files/5g_rfsimulator_u0_25prb</yaml_path>
<services>oai-amf oai-smf oai-upf oai-ext-dn</services> <services>mysql oai-amf oai-smf oai-upf oai-ext-dn</services>
<nb_healthy>5</nb_healthy> <nb_healthy>5</nb_healthy>
</testCase> </testCase>
<testCase id="000002"> <testCase id="000002">
<class>DeployGenObject</class> <class>DeployGenObject</class>
<desc>Deploy OAI 5G gNB RF sim SA</desc> <desc>Deploy OAI 5G gNB+nrUE RF sim SA</desc>
<yaml_path>yaml_files/5g_rfsimulator_u0_25prb</yaml_path> <yaml_path>yaml_files/5g_rfsimulator_u0_25prb</yaml_path>
<services>oai-gnb</services> <services>oai-gnb oai-nr-ue</services>
<nb_healthy>6</nb_healthy> <nb_healthy>7</nb_healthy>
</testCase> </testCase>
<testCase id="000003"> <testCase id="000003">
<class>DeployGenObject</class> <class>Attach_UE</class>
<desc>Deploy OAI 5G NR-UE RF sim SA</desc> <desc>Attach OAI UE (Wait for IP)</desc>
<yaml_path>yaml_files/5g_rfsimulator_u0_25prb</yaml_path> <id>rfsim5g_ue</id>
<services>oai-nr-ue</services>
<nb_healthy>7</nb_healthy>
</testCase> </testCase>
<testCase id="020001"> <testCase id="020001">
......
...@@ -26,6 +26,8 @@ ...@@ -26,6 +26,8 @@
<htmlTabIcon>tasks</htmlTabIcon> <htmlTabIcon>tasks</htmlTabIcon>
<repeatCount>1</repeatCount> <repeatCount>1</repeatCount>
<TestCaseRequestedList> <TestCaseRequestedList>
010001
010002
030202 030202
030201 030201
222220 222220
...@@ -33,6 +35,17 @@ ...@@ -33,6 +35,17 @@
</TestCaseRequestedList> </TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList> <TestCaseExclusionList></TestCaseExclusionList>
<testCase id= "010001">
<class>Detach_UE</class>
<desc>Detach UE</desc>
<id>idefix</id>
</testCase>
<testCase id="010002">
<class>Terminate_UE</class>
<desc>Terminate Quectel</desc>
<id>idefix</id>
</testCase>
<testCase id="030201"> <testCase id="030201">
<class>Undeploy_Object</class> <class>Undeploy_Object</class>
<desc>Undeploy eNB</desc> <desc>Undeploy eNB</desc>
......
...@@ -26,10 +26,23 @@ ...@@ -26,10 +26,23 @@
<htmlTabIcon>tasks</htmlTabIcon> <htmlTabIcon>tasks</htmlTabIcon>
<repeatCount>1</repeatCount> <repeatCount>1</repeatCount>
<TestCaseRequestedList> <TestCaseRequestedList>
010001
010002
030201 030201
</TestCaseRequestedList> </TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList> <TestCaseExclusionList></TestCaseExclusionList>
<testCase id= "010001">
<class>Detach_UE</class>
<desc>Detach UE</desc>
<id>idefix</id>
</testCase>
<testCase id="010002">
<class>Terminate_UE</class>
<desc>Terminate Quectel</desc>
<id>idefix</id>
</testCase>
<testCase id="030201"> <testCase id="030201">
<class>Undeploy_Object</class> <class>Undeploy_Object</class>
<desc>Undeploy gNB</desc> <desc>Undeploy gNB</desc>
......
...@@ -37,6 +37,10 @@ ...@@ -37,6 +37,10 @@
370001 370001
370000 370000
370002 370002
360001
100002
360002
350000
310011 310011
310002 310002
330201 330201
...@@ -114,9 +118,9 @@ ...@@ -114,9 +118,9 @@
<testCase id="350000"> <testCase id="350000">
<class>Ping</class> <class>Ping</class>
<desc>Ping: 20pings in 20sec</desc> <desc>Ping: 50pings in 10sec</desc>
<id>idefix</id> <id>idefix</id>
<ping_args>-c 20 %cn_ip%</ping_args> <ping_args>-c 20 -i 0.2 %cn_ip%</ping_args>
<ping_packetloss_threshold>1</ping_packetloss_threshold> <ping_packetloss_threshold>1</ping_packetloss_threshold>
<ping_rttavg_threshold>25</ping_rttavg_threshold> <ping_rttavg_threshold>25</ping_rttavg_threshold>
</testCase> </testCase>
...@@ -152,6 +156,27 @@ ...@@ -152,6 +156,27 @@
<iperf_profile>single-ue</iperf_profile> <iperf_profile>single-ue</iperf_profile>
</testCase> </testCase>
<testCase id="360001">
<class>Custom_Command</class>
<desc>Trigger Reestablishment (on DU)</desc>
<node>ofqot</node>
<command>echo ci force_reestab | nc -N 192.168.68.195 9090 | grep -E 'Reset RLC counters of UE RNTI [0-9a-f]{4} to trigger reestablishment'</command>
<command_fail>yes</command_fail>
</testCase>
<testCase id="360002">
<class>Custom_Command</class>
<desc>Verify Reestablishment (on CU)</desc>
<node>ofqot</node>
<command>echo ci get_reestab_count | nc -N 192.168.68.194 9090 | grep -E 'UE RNTI [0-9a-f]{4} reestab 1'</command>
<command_fail>yes</command_fail>
</testCase>
<testCase id="100002">
<class>IdleSleep</class>
<desc>Sleep</desc>
<idle_sleep_time_in_sec>10</idle_sleep_time_in_sec>
</testCase>
<testCase id="330201"> <testCase id="330201">
<class>Undeploy_Object</class> <class>Undeploy_Object</class>
<desc>Undeploy CU-DU</desc> <desc>Undeploy CU-DU</desc>
......
...@@ -26,11 +26,24 @@ ...@@ -26,11 +26,24 @@
<htmlTabIcon>tasks</htmlTabIcon> <htmlTabIcon>tasks</htmlTabIcon>
<repeatCount>1</repeatCount> <repeatCount>1</repeatCount>
<TestCaseRequestedList> <TestCaseRequestedList>
010001
010002
330201 330201
222222 222222
</TestCaseRequestedList> </TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList> <TestCaseExclusionList></TestCaseExclusionList>
<testCase id= "010001">
<class>Detach_UE</class>
<desc>Detach UE</desc>
<id>idefix</id>
</testCase>
<testCase id="010002">
<class>Terminate_UE</class>
<desc>Terminate Quectel</desc>
<id>idefix</id>
</testCase>
<testCase id="330201"> <testCase id="330201">
<class>Undeploy_Object</class> <class>Undeploy_Object</class>
<desc>Undeploy CU-CP/CU-UP/DU</desc> <desc>Undeploy CU-CP/CU-UP/DU</desc>
......
...@@ -26,10 +26,23 @@ ...@@ -26,10 +26,23 @@
<htmlTabIcon>tasks</htmlTabIcon> <htmlTabIcon>tasks</htmlTabIcon>
<repeatCount>1</repeatCount> <repeatCount>1</repeatCount>
<TestCaseRequestedList> <TestCaseRequestedList>
010001
010002
230201 230201
</TestCaseRequestedList> </TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList> <TestCaseExclusionList></TestCaseExclusionList>
<testCase id= "010001">
<class>Detach_UE</class>
<desc>Detach UE</desc>
<id>idefix</id>
</testCase>
<testCase id="010002">
<class>Terminate_UE</class>
<desc>Terminate Quectel</desc>
<id>idefix</id>
</testCase>
<testCase id="230201"> <testCase id="230201">
<class>Undeploy_Object</class> <class>Undeploy_Object</class>
<desc>Undeploy CU-DU</desc> <desc>Undeploy CU-DU</desc>
......
...@@ -26,10 +26,23 @@ ...@@ -26,10 +26,23 @@
<htmlTabIcon>tasks</htmlTabIcon> <htmlTabIcon>tasks</htmlTabIcon>
<repeatCount>1</repeatCount> <repeatCount>1</repeatCount>
<TestCaseRequestedList> <TestCaseRequestedList>
010001
010002
030201 030201
</TestCaseRequestedList> </TestCaseRequestedList>
<TestCaseExclusionList></TestCaseExclusionList> <TestCaseExclusionList></TestCaseExclusionList>
<testCase id= "010001">
<class>Detach_UE</class>
<desc>Detach UE</desc>
<id>idefix</id>
</testCase>
<testCase id="010002">
<class>Terminate_UE</class>
<desc>Terminate Quectel</desc>
<id>idefix</id>
</testCase>
<testCase id="030201"> <testCase id="030201">
<class>Undeploy_Object</class> <class>Undeploy_Object</class>
<desc>Undeploy gNB</desc> <desc>Undeploy gNB</desc>
......
version: '3.8' version: '3.8'
services: services:
mysql:
container_name: "rfsim5g-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: "rfsim5g-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: "rfsim5g-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: "rfsim5g-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: rfsim5g-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: oai-gnb:
image: oaisoftwarealliance/oai-gnb:develop image: oaisoftwarealliance/oai-gnb:develop
privileged: true privileged: true
container_name: rfsim5g-oai-gnb container_name: rfsim5g-oai-gnb
environment: environment:
USE_ADDITIONAL_OPTIONS: --do-ra --rfsim --rfsimulator.wait_timeout 20 --noS1 --log_config.global_log_options level,nocolor,time USE_ADDITIONAL_OPTIONS: --sa --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:
ipv4_address: 192.168.71.140 ipv4_address: 192.168.71.140
volumes: volumes:
- ../../conf_files/gnb.band261.32prb.rfsim.phytest-dora.conf:/opt/oai-gnb/etc/gnb.conf - ../../conf_files/gnb.sa.band261.u3.32prb.rfsim.conf:/opt/oai-gnb/etc/gnb.conf
- rrc.config:/opt/oai-gnb/
healthcheck: healthcheck:
test: /bin/bash -c "pgrep nr-softmodem" test: /bin/bash -c "pgrep nr-softmodem"
interval: 10s interval: 10s
...@@ -24,11 +105,12 @@ services: ...@@ -24,11 +105,12 @@ services:
privileged: true privileged: true
container_name: rfsim5g-oai-nr-ue container_name: rfsim5g-oai-nr-ue
environment: environment:
USE_ADDITIONAL_OPTIONS: --do-ra --rfsim --noS1 --reconfig-file etc/rrc/reconfig.raw --rbconfig-file etc/rrc/rbconfig.raw --rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time USE_ADDITIONAL_OPTIONS: --sa --rfsim
--rfsimulator.serveraddr 192.168.71.140 --log_config.global_log_options level,nocolor,time
-r 32 --numerology 3 --band 261 -C 27533160000 --ssb 73
ASAN_OPTIONS: detect_leaks=0 ASAN_OPTIONS: detect_leaks=0
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
- rrc.config:/opt/oai-nr-ue/etc/rrc/
depends_on: depends_on:
- oai-gnb - oai-gnb
networks: networks:
...@@ -40,9 +122,6 @@ services: ...@@ -40,9 +122,6 @@ services:
timeout: 5s timeout: 5s
retries: 5 retries: 5
volumes:
rrc.config:
networks: networks:
public_net: public_net:
driver: bridge driver: bridge
...@@ -52,3 +131,11 @@ networks: ...@@ -52,3 +131,11 @@ networks:
- subnet: 192.168.71.128/26 - subnet: 192.168.71.128/26
driver_opts: driver_opts:
com.docker.network.bridge.name: "rfsim5g-public" com.docker.network.bridge.name: "rfsim5g-public"
traffic_net:
driver: bridge
name: rfsim5g-oai-traffic-net
ipam:
config:
- subnet: 192.168.72.128/26
driver_opts:
com.docker.network.bridge.name: "rfsim5g-traffic"
...@@ -5,6 +5,8 @@ services: ...@@ -5,6 +5,8 @@ services:
privileged: true privileged: true
network_mode: "host" network_mode: "host"
container_name: oai-gnb container_name: oai-gnb
ulimits:
core: -1 # for core dumps
environment: environment:
TZ: Europe/Paris TZ: Europe/Paris
USE_ADDITIONAL_OPTIONS: --sa --tune-offset 20000000 -A 45 --log_config.global_log_options level,nocolor,time USE_ADDITIONAL_OPTIONS: --sa --tune-offset 20000000 -A 45 --log_config.global_log_options level,nocolor,time
......
...@@ -5,6 +5,8 @@ services: ...@@ -5,6 +5,8 @@ services:
privileged: true privileged: true
network_mode: host network_mode: host
container_name: oai-nr-ue container_name: oai-nr-ue
ulimits:
core: -1 # for core dumps
#entrypoint: /bin/bash -c "sleep infinity" #entrypoint: /bin/bash -c "sleep infinity"
environment: environment:
TZ: Europe/Paris TZ: Europe/Paris
......
...@@ -5,6 +5,8 @@ services: ...@@ -5,6 +5,8 @@ services:
image: oai-enb:latest image: oai-enb:latest
privileged: true privileged: true
container_name: nsa-b200-enb container_name: nsa-b200-enb
ulimits:
core: -1 # for core dumps
environment: environment:
USE_B2XX: 'yes' USE_B2XX: 'yes'
USE_ADDITIONAL_OPTIONS: --log_config.global_log_options level,nocolor,time,line_num,function USE_ADDITIONAL_OPTIONS: --log_config.global_log_options level,nocolor,time,line_num,function
......
...@@ -5,6 +5,8 @@ services: ...@@ -5,6 +5,8 @@ services:
image: oai-gnb:latest image: oai-gnb:latest
privileged: true privileged: true
container_name: nsa-b200-gnb container_name: nsa-b200-gnb
ulimits:
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: -E -q --RUs.[0].sdr_addrs serial=30C51D4 --continuous-tx --log_config.global_log_options level,nocolor,time,line_num,function
......
...@@ -5,6 +5,8 @@ services: ...@@ -5,6 +5,8 @@ services:
privileged: true privileged: true
network_mode: "host" network_mode: "host"
container_name: oai-gnb-aw2s container_name: oai-gnb-aw2s
ulimits:
core: -1 # for core dumps
environment: environment:
TZ: Europe/Paris TZ: Europe/Paris
USE_ADDITIONAL_OPTIONS: --sa USE_ADDITIONAL_OPTIONS: --sa
......
...@@ -5,6 +5,8 @@ services: ...@@ -5,6 +5,8 @@ services:
image: oai-gnb:latest image: oai-gnb:latest
privileged: true privileged: true
container_name: sa-b200-gnb container_name: sa-b200-gnb
ulimits:
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: --sa --RUs.[0].sdr_addrs serial=30C51D4 --telnetsrv --telnetsrv.shrmod ci --continuous-tx --log_config.global_log_options level,nocolor,time,line_num,function
......
...@@ -5,8 +5,10 @@ services: ...@@ -5,8 +5,10 @@ services:
image: oai-gnb:latest image: oai-gnb:latest
privileged: true privileged: true
container_name: sa-cucp-gnb container_name: sa-cucp-gnb
ulimits:
core: -1 # for core dumps
environment: environment:
USE_ADDITIONAL_OPTIONS: --sa --log_config.global_log_options level,nocolor,time,line_num,function USE_ADDITIONAL_OPTIONS: --sa --telnetsrv --telnetsrv.shrmod ci --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
networks: networks:
...@@ -23,6 +25,8 @@ services: ...@@ -23,6 +25,8 @@ services:
image: oai-nr-cuup:latest image: oai-nr-cuup:latest
privileged: true privileged: true
container_name: sa-cuup-gnb container_name: sa-cuup-gnb
ulimits:
core: -1 # for core dumps
environment: environment:
USE_ADDITIONAL_OPTIONS: --sa --log_config.global_log_options level,nocolor,time,line_num,function USE_ADDITIONAL_OPTIONS: --sa --log_config.global_log_options level,nocolor,time,line_num,function
volumes: volumes:
...@@ -41,9 +45,17 @@ services: ...@@ -41,9 +45,17 @@ services:
image: oai-gnb:latest image: oai-gnb:latest
privileged: true privileged: true
container_name: sa-du-b200-gnb container_name: sa-du-b200-gnb
ulimits:
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 -E --log_config.global_log_options level,nocolor,time,line_num,function --gNBs.[0].min_rxtxtime 2 --gNBs.[0].do_CSIRS 1 --gNBs.[0].do_SRS 1 --RUs.[0].att_rx 18 --RUs.[0].att_tx 18 USE_ADDITIONAL_OPTIONS: --sa
--RUs.[0].sdr_addrs serial=30C51D4
--continuous-tx -E
--telnetsrv --telnetsrv.shrmod ci
--gNBs.[0].min_rxtxtime 2 --gNBs.[0].do_CSIRS 1 --gNBs.[0].do_SRS 1
--RUs.[0].att_rx 18 --RUs.[0].att_tx 18
--log_config.global_log_options level,nocolor,time,line_num,function
volumes: volumes:
- ../../conf_files/gnb-du.sa.band78.106prb.usrpb200.conf:/opt/oai-gnb/etc/gnb.conf - ../../conf_files/gnb-du.sa.band78.106prb.usrpb200.conf:/opt/oai-gnb/etc/gnb.conf
- /dev:/dev - /dev:/dev
......
...@@ -5,6 +5,8 @@ services: ...@@ -5,6 +5,8 @@ services:
image: oai-gnb:latest image: oai-gnb:latest
privileged: true privileged: true
container_name: sa-cu-gnb container_name: sa-cu-gnb
ulimits:
core: -1 # for core dumps
environment: environment:
USE_ADDITIONAL_OPTIONS: --sa --telnetsrv --telnetsrv.shrmod ci --log_config.global_log_options level,nocolor,time,line_num,function USE_ADDITIONAL_OPTIONS: --sa --telnetsrv --telnetsrv.shrmod ci --log_config.global_log_options level,nocolor,time,line_num,function
volumes: volumes:
...@@ -24,9 +26,11 @@ services: ...@@ -24,9 +26,11 @@ services:
image: oai-gnb:latest image: oai-gnb:latest
privileged: true privileged: true
container_name: sa-du-b200-gnb container_name: sa-du-b200-gnb
ulimits:
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 --log_config.global_log_options level,nocolor,time,line_num,function --gNBs.[0].min_rxtxtime 2 --gNBs.[0].do_CSIRS 1 --gNBs.[0].do_SRS 0 --MACRLCs.[0].ul_max_mcs 28 --L1s.[0].max_ldpc_iterations 20 USE_ADDITIONAL_OPTIONS: --sa --RUs.[0].sdr_addrs serial=30C51D4 --telnetsrv --telnetsrv.shrmod ci --log_config.global_log_options level,nocolor,time,line_num,function --gNBs.[0].min_rxtxtime 2 --gNBs.[0].do_CSIRS 1 --gNBs.[0].do_SRS 0 --L1s.[0].max_ldpc_iterations 20
volumes: volumes:
- ../../conf_files/gnb-du.sa.band1.52prb.usrpb210.conf:/opt/oai-gnb/etc/gnb.conf - ../../conf_files/gnb-du.sa.band1.52prb.usrpb210.conf:/opt/oai-gnb/etc/gnb.conf
- /dev:/dev - /dev:/dev
......
...@@ -5,6 +5,8 @@ services: ...@@ -5,6 +5,8 @@ services:
image: oai-gnb:latest image: oai-gnb:latest
privileged: true privileged: true
container_name: sa-b200-gnb container_name: sa-b200-gnb
ulimits:
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: --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
......
...@@ -666,10 +666,7 @@ install_asn1c_from_source(){ ...@@ -666,10 +666,7 @@ install_asn1c_from_source(){
# GIT_SSL_NO_VERIFY=true git clone https://gitlab.eurecom.fr/oai/asn1c.git /tmp/asn1c # GIT_SSL_NO_VERIFY=true git clone https://gitlab.eurecom.fr/oai/asn1c.git /tmp/asn1c
git clone https://github.com/mouse07410/asn1c /tmp/asn1c git clone https://github.com/mouse07410/asn1c /tmp/asn1c
cd /tmp/asn1c cd /tmp/asn1c
# 2024-02-06: problem compatibility between E2-agent and 4cfcd4f191c3fa41f6ac1b15cb2ad3acc1520af5 from asn1c git checkout vlm_master
# Reverting to previous commit that works
# TODO : revert to vlm_master once FlexRic and E2-agent are fixed
git checkout -f a6bdcd22658d6b7c3ed218d8c1375907ac532b64
# Showing which version is used # Showing which version is used
git log -n1 git log -n1
autoreconf -iv autoreconf -iv
......
...@@ -56,5 +56,4 @@ typedef enum { CPtype = 0, UPtype } E1_t; ...@@ -56,5 +56,4 @@ typedef enum { CPtype = 0, UPtype } E1_t;
#define GTPV1_U_PORT_NUMBER (2152) #define GTPV1_U_PORT_NUMBER (2152)
typedef enum { non_dynamic, dynamic } fiveQI_type_t; typedef enum { non_dynamic, dynamic } fiveQI_type_t;
#define maxSRBs 4
#endif #endif
...@@ -497,6 +497,8 @@ int logInit (void) ...@@ -497,6 +497,8 @@ int logInit (void)
register_log_component("GNB_APP","log",GNB_APP); register_log_component("GNB_APP","log",GNB_APP);
register_log_component("NR_RRC","log",NR_RRC); register_log_component("NR_RRC","log",NR_RRC);
register_log_component("NR_MAC","log",NR_MAC); register_log_component("NR_MAC","log",NR_MAC);
register_log_component("NR_MAC_DCI", "log", NR_MAC_DCI);
register_log_component("NR_PHY_DCI", "log", NR_PHY_DCI);
register_log_component("NR_PHY","log",NR_PHY); register_log_component("NR_PHY","log",NR_PHY);
register_log_component("NGAP","",NGAP); register_log_component("NGAP","",NGAP);
register_log_component("ITTI","log",ITTI); register_log_component("ITTI","log",ITTI);
......
This diff is collapsed.
...@@ -361,6 +361,48 @@ ID = LEGACY_NR_MAC_TRACE ...@@ -361,6 +361,48 @@ ID = LEGACY_NR_MAC_TRACE
GROUP = ALL:LEGACY_NR_MAC:LEGACY_GROUP_TRACE:LEGACY GROUP = ALL:LEGACY_NR_MAC:LEGACY_GROUP_TRACE:LEGACY
FORMAT = string,log FORMAT = string,log
ID = LEGACY_NR_PHY_DCI_INFO
DESC = NR_PHY_DCI legacy logs - info level
GROUP = ALL:LEGACY_NR_PHY_DCI:LEGACY_GROUP_INFO:LEGACY
FORMAT = string,log
ID = LEGACY_NR_PHY_DCI_ERROR
DESC = NR_PHY_DCI legacy logs - error level
GROUP = ALL:LEGACY_NR_PHY_DCI:LEGACY_GROUP_ERROR:LEGACY
FORMAT = string,log
ID = LEGACY_NR_PHY_DCI_WARNING
DESC = NR_PHY_DCI legacy logs - warning level
GROUP = ALL:LEGACY_NR_PHY_DCI:LEGACY_GROUP_WARNING:LEGACY
FORMAT = string,log
ID = LEGACY_NR_PHY_DCI_DEBUG
DESC = NR_PHY_DCI legacy logs - debug level
GROUP = ALL:LEGACY_NR_PHY_DCI:LEGACY_GROUP_DEBUG:LEGACY
FORMAT = string,log
ID = LEGACY_NR_PHY_DCI_TRACE
DESC = NR_PHY_DCI legacy logs - trace level
GROUP = ALL:LEGACY_NR_PHY_DCI:LEGACY_GROUP_TRACE:LEGACY
FORMAT = string,log
ID = LEGACY_NR_MAC_DCI_INFO
DESC = NR_MAC_DCI legacy logs - info level
GROUP = ALL:LEGACY_NR_MAC_DCI:LEGACY_GROUP_INFO:LEGACY
FORMAT = string,log
ID = LEGACY_NR_MAC_DCI_ERROR
DESC = NR_MAC_DCI legacy logs - error level
GROUP = ALL:LEGACY_NR_MAC_DCI:LEGACY_GROUP_ERROR:LEGACY
FORMAT = string,log
ID = LEGACY_NR_MAC_DCI_WARNING
DESC = NR_MAC_DCI legacy logs - warning level
GROUP = ALL:LEGACY_NR_MAC_DCI:LEGACY_GROUP_WARNING:LEGACY
FORMAT = string,log
ID = LEGACY_NR_MAC_DCI_DEBUG
DESC = NR_MAC_DCI legacy logs - debug level
GROUP = ALL:LEGACY_NR_MAC_DCI:LEGACY_GROUP_DEBUG:LEGACY
FORMAT = string,log
ID = LEGACY_NR_MAC_DCI_TRACE
DESC = NR_MAC_DCI legacy logs - trace level
GROUP = ALL:LEGACY_NR_MAC_DCI:LEGACY_GROUP_TRACE:LEGACY
FORMAT = string,log
ID = LEGACY_PHY_INFO ID = LEGACY_PHY_INFO
DESC = PHY legacy logs - info level DESC = PHY legacy logs - info level
GROUP = ALL:LEGACY_PHY:LEGACY_GROUP_INFO:LEGACY GROUP = ALL:LEGACY_PHY:LEGACY_GROUP_INFO:LEGACY
......
add_library(tracer_utils OBJECT configuration.c database.c event.c handler.c utils.c) add_library(tracer_utils OBJECT configuration.c database.c event.c handler.c utils.c)
target_link_libraries(tracer_utils PUBLIC m pthread) target_link_libraries(tracer_utils PUBLIC m pthread)
add_library(tracer_events OBJECT event_selector.c)
add_executable(record record.c) add_executable(record record.c)
target_link_libraries(record PRIVATE tracer_utils) target_link_libraries(record PRIVATE tracer_utils)
...@@ -28,10 +26,19 @@ add_executable(multi multi.c) ...@@ -28,10 +26,19 @@ add_executable(multi multi.c)
target_link_libraries(multi PRIVATE tracer_utils T) target_link_libraries(multi PRIVATE tracer_utils T)
target_include_directories(multi PRIVATE ..) target_include_directories(multi PRIVATE ..)
add_executable(textlog textlog.c)
target_link_libraries(textlog PRIVATE tracer_utils tracer_filter
tracer_logger tracer_view)
add_subdirectory(filter)
add_subdirectory(logger)
add_subdirectory(view)
add_custom_target(T_tools) add_custom_target(T_tools)
add_dependencies(T_tools add_dependencies(T_tools
record replay extract_config extract_input_subframe record replay extract_config extract_input_subframe
extract_output_subframe extract macpdu2wireshark multi) extract_output_subframe extract macpdu2wireshark multi
textlog)
add_dependencies(nr-softmodem T_tools) add_dependencies(nr-softmodem T_tools)
add_dependencies(nr-uesoftmodem T_tools) add_dependencies(nr-uesoftmodem T_tools)
add_dependencies(lte-softmodem T_tools) add_dependencies(lte-softmodem T_tools)
...@@ -42,9 +49,7 @@ add_dependencies(lte-uesoftmodem T_tools) ...@@ -42,9 +49,7 @@ add_dependencies(lte-uesoftmodem T_tools)
# GUI-related tools so they can be added on demand, if necessary. # GUI-related tools so they can be added on demand, if necessary.
add_boolean_option(T_TRACER_GUI OFF "Compile T tracer GUI tools" OFF) add_boolean_option(T_TRACER_GUI OFF "Compile T tracer GUI tools" OFF)
if(T_TRACER_GUI) if(T_TRACER_GUI)
add_executable(textlog textlog.c) add_library(tracer_events OBJECT event_selector.c)
target_link_libraries(textlog PRIVATE tracer_utils tracer_filter tracer_gui
tracer_logger tracer_view tracer_events)
find_library(png png REQUIRED) find_library(png png REQUIRED)
add_executable(enb enb.c) add_executable(enb enb.c)
...@@ -71,9 +76,6 @@ if(T_TRACER_GUI) ...@@ -71,9 +76,6 @@ if(T_TRACER_GUI)
tracer_logger tracer_view tracer_events) tracer_logger tracer_view tracer_events)
add_subdirectory(gui) add_subdirectory(gui)
add_subdirectory(filter)
add_subdirectory(logger)
add_subdirectory(view)
add_dependencies(T_tools textlog enb gnb ue vcd to_vcd) add_dependencies(T_tools enb gnb ue vcd to_vcd)
endif() endif()
...@@ -31,9 +31,8 @@ extract: extract.o database.o event.o utils.o configuration.o ...@@ -31,9 +31,8 @@ extract: extract.o database.o event.o utils.o configuration.o
$(CC) $(CFLAGS) -o $@ $^ $(LIBS) $(CC) $(CFLAGS) -o $@ $^ $(LIBS)
textlog: utils.o textlog.o database.o event.o handler.o configuration.o \ textlog: utils.o textlog.o database.o event.o handler.o configuration.o \
event_selector.o view/view.a gui/gui.a logger/logger.a \ view/view.a logger/logger.a filter/filter.a
filter/filter.a $(CC) $(CFLAGS) -o textlog $^ $(LIBS)
$(CC) $(CFLAGS) -o textlog $^ $(LIBS) $(XLIBS)
enb: utils.o enb.o database.o event.o handler.o configuration.o \ enb: utils.o enb.o database.o event.o handler.o configuration.o \
event_selector.o view/view.a gui/gui.a logger/logger.a \ event_selector.o view/view.a gui/gui.a logger/logger.a \
......
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <pthread.h>
#include <signal.h> #include <signal.h>
#include "database.h" #include "database.h"
#include "event.h" #include "event.h"
#include "handler.h" #include "handler.h"
#include "logger/logger.h" #include "logger/logger.h"
#include "view/view.h" #include "view/view.h"
#include "gui/gui.h"
#include "utils.h" #include "utils.h"
#include "event_selector.h"
#include "configuration.h" #include "configuration.h"
typedef struct { void activate_traces(int socket, int *is_on, int nevents)
int socket;
int *is_on;
int nevents;
pthread_mutex_t lock;
} textlog_data;
void is_on_changed(void *_d)
{ {
textlog_data *d = _d;
char t; char t;
if (pthread_mutex_lock(&d->lock)) abort();
if (d->socket == -1) goto no_connection;
t = 1; t = 1;
if (socket_send(d->socket, &t, 1) == -1 || if (socket_send(socket, &t, 1) == -1 ||
socket_send(d->socket, &d->nevents, sizeof(int)) == -1 || socket_send(socket, &nevents, sizeof(int)) == -1 ||
socket_send(d->socket, d->is_on, d->nevents * sizeof(int)) == -1) socket_send(socket, is_on, nevents * sizeof(int)) == -1)
abort(); abort();
no_connection:
if (pthread_mutex_unlock(&d->lock)) abort();
} }
void usage(void) void usage(void)
...@@ -54,28 +36,18 @@ void usage(void) ...@@ -54,28 +36,18 @@ void usage(void)
" -full also dump buffers' content\n" " -full also dump buffers' content\n"
" -raw-time also prints 'raw time'\n" " -raw-time also prints 'raw time'\n"
" -ip <host> connect to given IP address (default %s)\n" " -ip <host> connect to given IP address (default %s)\n"
" -p <port> connect to given port (default %d)\n" " -p <port> connect to given port (default %d)\n",
" -x GUI output\n"
" -debug-gui activate GUI debug logs\n"
" -no-gui disable GUI entirely\n",
DEFAULT_REMOTE_IP, DEFAULT_REMOTE_IP,
DEFAULT_REMOTE_PORT DEFAULT_REMOTE_PORT
); );
exit(1); exit(1);
} }
static void *gui_thread(void *_g)
{
gui *g = _g;
gui_loop(g);
return NULL;
}
int main(int n, char **v) int main(int n, char **v)
{ {
extern int volatile gui_logd;
char *database_filename = NULL; char *database_filename = NULL;
void *database; void *database;
int socket;
char *ip = DEFAULT_REMOTE_IP; char *ip = DEFAULT_REMOTE_IP;
int port = DEFAULT_REMOTE_PORT; int port = DEFAULT_REMOTE_PORT;
char **on_off_name; char **on_off_name;
...@@ -86,11 +58,7 @@ int main(int n, char **v) ...@@ -86,11 +58,7 @@ int main(int n, char **v)
int i; int i;
event_handler *h; event_handler *h;
logger *textlog; logger *textlog;
gui *g = NULL; /* initialization not necessary but gcc is not happy */
int gui_mode = 0;
view *out; view *out;
int gui_active = 1;
textlog_data textlog_data;
int full = 0; int full = 0;
int raw_time = 0; int raw_time = 0;
...@@ -115,16 +83,11 @@ int main(int n, char **v) ...@@ -115,16 +83,11 @@ int main(int n, char **v)
{ on_off_name[on_off_n]=NULL; on_off_action[on_off_n++]=1; continue; } { on_off_name[on_off_n]=NULL; on_off_action[on_off_n++]=1; continue; }
if (!strcmp(v[i], "-OFF")) if (!strcmp(v[i], "-OFF"))
{ on_off_name[on_off_n]=NULL; on_off_action[on_off_n++]=0; continue; } { on_off_name[on_off_n]=NULL; on_off_action[on_off_n++]=0; continue; }
if (!strcmp(v[i], "-x")) { gui_mode = 1; continue; }
if (!strcmp(v[i], "-debug-gui")) { gui_logd = 1; continue; }
if (!strcmp(v[i], "-no-gui")) { gui_active = 0; continue; }
if (!strcmp(v[i], "-full")) { full = 1; continue; } if (!strcmp(v[i], "-full")) { full = 1; continue; }
if (!strcmp(v[i], "-raw-time")) { raw_time = 1; continue; } if (!strcmp(v[i], "-raw-time")) { raw_time = 1; continue; }
usage(); usage();
} }
if (gui_active == 0) gui_mode = 0;
if (database_filename == NULL) { if (database_filename == NULL) {
printf("ERROR: provide a database file (-d)\n"); printf("ERROR: provide a database file (-d)\n");
exit(1); exit(1);
...@@ -140,29 +103,12 @@ int main(int n, char **v) ...@@ -140,29 +103,12 @@ int main(int n, char **v)
h = new_handler(database); h = new_handler(database);
if (gui_active) { out = new_view_stdout();
g = gui_init();
new_thread(gui_thread, g);
}
if (gui_mode) {
widget *w, *win;
// w = new_textlist(g, 600, 20, 0);
w = new_textlist(g, 800, 50, BACKGROUND_COLOR);
win = new_toplevel_window(g, 800, 50*12, "textlog");
widget_add_child(g, win, w, -1);
out = new_view_textlist(1000, 10, g, w);
//tout = new_view_textlist(7, 4, g, w);
} else {
out = new_view_stdout();
}
for (i = 0; i < number_of_events; i++) { for (i = 0; i < number_of_events; i++) {
char *name, *desc; char *name, *desc;
database_get_generic_description(database, i, &name, &desc); database_get_generic_description(database, i, &name, &desc);
textlog = new_textlog(h, database, name, desc); textlog = new_textlog(h, database, name, desc);
// "ENB_PHY_UL_CHANNEL_ESTIMATE",
// "ev: {} eNB_id [eNB_ID] frame [frame] subframe [subframe]");
logger_add_view(textlog, out); logger_add_view(textlog, out);
if (full) textlog_dump_buffer(textlog, 1); if (full) textlog_dump_buffer(textlog, 1);
if (raw_time) textlog_raw_time(textlog, 1); if (raw_time) textlog_raw_time(textlog, 1);
...@@ -173,24 +119,21 @@ int main(int n, char **v) ...@@ -173,24 +119,21 @@ int main(int n, char **v)
for (i = 0; i < on_off_n; i++) for (i = 0; i < on_off_n; i++)
on_off(database, on_off_name[i], is_on, on_off_action[i]); on_off(database, on_off_name[i], is_on, on_off_action[i]);
textlog_data.socket = -1; socket = connect_to(ip, port);
textlog_data.is_on = is_on; if (socket == -1) {
textlog_data.nevents = number_of_events; printf("fatal: connection failed\n");
if (pthread_mutex_init(&textlog_data.lock, NULL)) abort(); return 1;
if (gui_active) }
setup_event_selector(g, database, is_on, is_on_changed, &textlog_data);
textlog_data.socket = connect_to(ip, port);
/* send the first message - activate selected traces */ /* send the first message - activate selected traces */
is_on_changed(&textlog_data); activate_traces(socket, is_on, number_of_events);
OBUF ebuf = { osize: 0, omaxsize: 0, obuf: NULL }; OBUF ebuf = { osize: 0, omaxsize: 0, obuf: NULL };
/* read messages */ /* read messages */
while (1) { while (1) {
event e; event e;
e = get_event(textlog_data.socket, &ebuf, database); e = get_event(socket, &ebuf, database);
if (e.type == -1) break; if (e.type == -1) break;
handle_event(h, e); handle_event(h, e);
} }
......
...@@ -21,11 +21,11 @@ The telnet server provides an API which can be used by any oai component to add ...@@ -21,11 +21,11 @@ The telnet server provides an API which can be used by any oai component to add
telnet server source files are located in [common/utils/telnetsrv](https://gitlab.eurecom.fr/oai/openairinterface5g/tree/develop/common/utils/telnetsrv) telnet server source files are located in [common/utils/telnetsrv](https://gitlab.eurecom.fr/oai/openairinterface5g/tree/develop/common/utils/telnetsrv)
1. [telnetsrv.c](https://gitlab.eurecom.fr/oai/openairinterface5g/tree/develop/common/utils/telnetsrv/telnetsrv.c) contains the telnet server implementation, including the implementation of the `telnet` CLI command. This implementation is compatible with all softmodem executables and is in charge of loading any additional `libtelnetsrv_<app> .so` containing code specific to the running executables. 1. [telnetsrv.c](../telnetsrv.c) contains the telnet server implementation, including the implementation of the `telnet` CLI command. This implementation is compatible with all softmodem executables and is in charge of loading any additional `libtelnetsrv_<app> .so` containing code specific to the running executables.
1. [telnetsrv.h](https://gitlab.eurecom.fr/oai/openairinterface5g/tree/develop/common/utils/telnetsrv/telnetsrv.h) is the telnet server include file containing both private and public data type definitions. It also contains API prototypes for functions that are used to register a new command in the server. 1. [telnetsrv.h](../telnetsrv.h) is the telnet server include file containing both private and public data type definitions. It also contains API prototypes for functions that are used to register a new command in the server.
1. `telnetsrv_<XXX\>.c`: implementation of \<XXX\> CLI command which are delivered with the telnet server and are common to all softmodem executables. 1. `telnetsrv_<XXX\>.c`: implementation of \<XXX\> CLI command which are delivered with the telnet server and are common to all softmodem executables.
1. `telnetsrv_<XXX\>.h`: include file for the implementation of XXX CLI command. Usually included only in the corresponding `.c`file 1. `telnetsrv_<XXX\>.h`: include file for the implementation of XXX CLI command. Usually included only in the corresponding `.c`file
1. `telnetsrv_<app>_<XXX>.c`: implementation of \<XXX\> CLI command specific to the executable identified by \<app\>.These sources are used to create `libtelnetsrv_<app>.so` at build time. 1. `telnetsrv_<app>_<XXX>.c`: implementation of \<XXX\> CLI command specific to the executable identified by \<app\>.These sources are used to create `libtelnetsrv_<app>.so` at build time.
1. [telnetsrv_CMakeLists.txt](https://gitlab.eurecom.fr/oai/openairinterface5g/blob/develop/common/utils/telnetsrv/telnetsrv_CMakeLists.txt): CMakelists file containing the cmake instructions to build the telnet server. this file is included in the [global oai CMakelists](https://gitlab.eurecom.fr/oai/openairinterface5g/blob/develop/cmake_targets/CMakeLists.txt). 1. [telnetsrv_CMakeLists.txt](../CMakeLists.txt): CMakelists file containing the cmake instructions to build the telnet server. this file is included in the [global oai CMakelists](../../../../cmake_targets/CMakeLists.txt).
[oai telnet server home](telnetsrv.md) [oai telnet server home](telnetsrv.md)
...@@ -26,7 +26,7 @@ Below are examples of telnet sessions: ...@@ -26,7 +26,7 @@ Below are examples of telnet sessions:
* [measur command](telnetmeasur.md) * [measur command](telnetmeasur.md)
# telnet server parameters # telnet server parameters
The telnet server is using the [oai configuration module](Config/Rtusage). Telnet parameters must be specified in the `telnetsrv` section. Some parameters can be modified via the telnet telnet server command, as specified in the last column of the following table. The telnet server is using the [oai configuration module](../../../../common/config/DOC/config/rtusage.md). Telnet parameters must be specified in the `telnetsrv` section. Some parameters can be modified via the telnet telnet server command, as specified in the last column of the following table.
| name | type | default | description | dynamic | | name | type | default | description | dynamic |
|:---:|:---:|:---:|:----|:----:| |:---:|:---:|:---:|:----|:----:|
......
...@@ -75,11 +75,11 @@ sequenceDiagram ...@@ -75,11 +75,11 @@ sequenceDiagram
Note over u: E1AP_CUUP_task (SCTP Handler) Note over u: E1AP_CUUP_task (SCTP Handler)
Note over u: ASN1 decoder Note over u: ASN1 decoder
``` ```
More details about the E1AP procedures in OAI are available in this document: [E1 Procedures](./e1ap_procedures.md).
# 2. Running the E1 Split # 2. Running the E1 Split
The setup is assuming that all modules are running on the same machine. The user can refer to the [F1 design document](./F1-design.md) for local deployment of the DU. The setup is assuming that all modules are running on the same machine. The user can refer to the [F1 design document](./../F1-design.md) for local deployment of the DU.
## 2.1 Configuration File ## 2.1 Configuration File
......
<table style="border-collapse: collapse; border: none;">
<tr style="border-collapse: collapse; border: none;">
<td style="border-collapse: collapse; border: none;">
<a href="http://www.openairinterface.org/">
<img src="./images/oai_final_logo.png" alt="" border=3 height=50 width=150>
</img>
</a>
</td>
<td style="border-collapse: collapse; border: none; vertical-align: center;">
<b><font size = "5">E1AP Procedures</font></b>
</td>
</tr>
</table>
[[_TOC_]]
# Introduction
The E1 interface is between the gNB-CU-CP (Central Unit - Control Plane) and gNB-CU-UP (Central Unit - User Plane) nodes. This interface is governed by the E1 Application Protocol (E1AP) outlined in the 3GPP release 16 specifications, specifically in the documents:
* 3GPP TS 38.463 - E1 Application Protocol (E1AP)
* 3GPP TS 38.460 - E1 general aspects and principles
* 3GPP TS 38.461 - E1 interface: layer 1
* 3GPP TS 38.462 - E1 interface: signaling transport
The E1AP protocol consists of the following sets of functions:
* E1 Interface Management functions
* E1 Bearer Context Management functions
* TEID allocation function
## E1 Bearer Context Management function
This function handles the establishment, modification, and release of E1 bearer contexts.
* E1 Bearer Context Establishment: initiation of E1 bearer context is by gNB-CU-CP and acceptance or rejection is determined by gNB-CU-UP based on admission control criteria (e.g., resource availability).
* E1 Bearer Context Modification: can be initiated by either gNB-CU-CP or gNB-CU-UP, with the receiving node having the authority to accept or reject the modification.
* Release of Bearer Context: can be triggered either directly by gNB-CU-CP or following a request from gNB-CU-UP.
* QoS-Flow to DRB Mapping Configuration: responsible for setting up and modifying the QoS-flow to DRB mapping configuration. gNB-CU-CP decides the flow-to-DRB mapping, generates SDAP and PDCP configurations, and provides them to gNB-CU-UP.
# OAI implementation
For the E1AP design in OAI, please refer to the [E1 Design](./E1-design.md) document.
## E1 re-establishment
The purpose of this procedure is to follow-up the re-establishment of RRC connection over the E1 interface. For all activated DRBs a Bearer Context Modification from CU-CP to CU-UP is necessary, according to clause 9.2.2.4 of 3GPP TS 38.463. If any modification to the bearer context is required, the CU-CP informs the CU-UP with the relevant IEs (e.g. in case of PDCP re-establishment, PDCP Configuration IE clause 9.3.1.38), Current implementation in OAI:
```mermaid
sequenceDiagram
participant e as UE
participant d as DU
participant c as CUCP
participant u as CUUP
Note over e,c: RRCReestablishment Procedure
e->>d: RRCReestablishmentRequest
Note over d: initial_ul_rrc_message_transfer_f1ap
d->>+c: Initial UL RRC Message Transfer (CCCH, new C-RNTI)
Note over c: rrc_gNB_process_initial_ul_rrc_message
Note over c: rrc_handle_RRCReestablishmentRequests
c-->>+d: DL RRC Message Transfer
note right of d: fallback to RRC establishment
d-->>-e: RRCSetup
e-->>d: RRCSetupComplete
Note over c: rrc_gNB_generate_RRCReestablishment
Note over c: cuup_notify_reestablishment
Note over c: e1apCUCP_send_BEARER_CONTEXT_MODIFICATION_REQUEST
c->>u: BEARER CONTEXT MODIFICATION REQUEST
Note over u: e1apCUUP_handle_BEARER_CONTEXT_MODIFICATION_REQUEST
Note over u: e1_bearer_context_modif
Note over u: nr_pdcp_reestablishment
c->>-d: DL RRC Message Transfer (old gNB DU F1AP UE ID)
d->>e: RRCReestablishment
Note over d: Fetch UE Context with old gNB DU F1AP UE ID and update C-RNTI
e->>d: RRCReestablishmentComplete
u->>c: BEARER CONTEXT MODIFICATION RESPONSE
Note over c: e1apCUCP_handle_BEARER_CONTEXT_MODIFICATION_RESPONSE
```
...@@ -188,6 +188,10 @@ sudo ethtool -G enp1s0f0 tx 4096 rx 4096 ...@@ -188,6 +188,10 @@ sudo ethtool -G enp1s0f0 tx 4096 rx 4096
## 6.2 Real-time performance workarounds ## 6.2 Real-time performance workarounds
- Enable Performance Mode `sudo cpupower idle-set -D 0` - Enable Performance Mode `sudo cpupower idle-set -D 0`
- If you get real-time problems on heavy UL traffic, reduce the maximum UL MCS using an additional command-line switch: `--MACRLCs.[0].ul_max_mcs 14`. - If you get real-time problems on heavy UL traffic, reduce the maximum UL MCS using an additional command-line switch: `--MACRLCs.[0].ul_max_mcs 14`.
- 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. - 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.
## 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` .
...@@ -192,6 +192,7 @@ sudo ethtool -G enp1s0f0 tx 4096 rx 4096 ...@@ -192,6 +192,7 @@ sudo ethtool -G enp1s0f0 tx 4096 rx 4096
## 6.2 Real-time performance workarounds ## 6.2 Real-time performance workarounds
- Enable Performance Mode `sudo cpupower idle-set -D 0` - Enable Performance Mode `sudo cpupower idle-set -D 0`
- If you get real-time problems on heavy UL traffic, reduce the maximum UL MCS using an additional command-line switch: `--MACRLCs.[0].ul_max_mcs 14`. - If you get real-time problems on heavy UL traffic, reduce the maximum UL MCS using an additional command-line switch: `--MACRLCs.[0].ul_max_mcs 14`.
- 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. - 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.
...@@ -200,3 +201,6 @@ sudo ethtool -G enp1s0f0 tx 4096 rx 4096 ...@@ -200,3 +201,6 @@ sudo ethtool -G enp1s0f0 tx 4096 rx 4096
- Sometimes, the nrUE would keep repeating RA procedure because of Msg3 failure at the gNB. If it happens, add the `-A` option at the nrUE and/or gNB side, e.g., `-A 45`. This modifies the timing advance (in samples). Adjust +/-5 if the issue persists. - Sometimes, the nrUE would keep repeating RA procedure because of Msg3 failure at the gNB. If it happens, add the `-A` option at the nrUE and/or gNB side, e.g., `-A 45`. This modifies the timing advance (in samples). Adjust +/-5 if the issue persists.
- This can be necessary since certain USRPs have larger signal delays than others; it is therefore specific to the used USRP model. - This can be necessary since certain USRPs have larger signal delays than others; it is therefore specific to the used USRP model.
- The x310 and B210 are found to work with the default configuration; N310 and x410 can benefit from setting this timing advance. - The x310 and B210 are found to work with the default configuration; N310 and x410 can benefit from setting this timing advance.
## 6.5 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` .
...@@ -43,6 +43,7 @@ There is some general information in the [OpenAirInterface Gitlab Wiki](https:// ...@@ -43,6 +43,7 @@ There is some general information in the [OpenAirInterface Gitlab Wiki](https://
- [How to run a 5G-NSA setup](./TESTING_GNB_W_COTS_UE.md) - [How to run a 5G-NSA setup](./TESTING_GNB_W_COTS_UE.md)
- [How to run a 4G setup using L1 simulator](./L1SIM.md) _Note: we recommend the RFsimulator_ - [How to run a 4G setup using L1 simulator](./L1SIM.md) _Note: we recommend the RFsimulator_
- [How to use the L2 simulator](./L2NFAPI.md) - [How to use the L2 simulator](./L2NFAPI.md)
- [How to use the OAI channel simulator](../openair1/SIMULATION/TOOLS/DOC/channel_simulation.md)
- [How to use multiple BWPs](./RUN_NR_multiple_BWPs.md) - [How to use multiple BWPs](./RUN_NR_multiple_BWPs.md)
- [How to run OAI-VNF and OAI-PNF](./RUN_NR_NFAPI.md) _Note: does not work currently_ - [How to run OAI-VNF and OAI-PNF](./RUN_NR_NFAPI.md) _Note: does not work currently_
- [How to use the positioning reference signal (PRS)](./RUN_NR_PRS.md) - [How to use the positioning reference signal (PRS)](./RUN_NR_PRS.md)
...@@ -57,7 +58,7 @@ Legacy unmaintained files: ...@@ -57,7 +58,7 @@ Legacy unmaintained files:
# Designs # Designs
- General software architecture notes: [SW_archi.md](./SW_archi.md) - General software architecture notes: [SW_archi.md](./SW_archi.md)
- [Information on E1](./E1-design.md) - [Information on E1](./E1AP/E1-design.md)
- [Information on F1](./F1-design.md) - [Information on F1](./F1-design.md)
- [Information on how NR nFAPI works](./NR_NFAPI_archi.md) - [Information on how NR nFAPI works](./NR_NFAPI_archi.md)
- [Flow graph of the L1 in gNB](SW-archi-graph.md) - [Flow graph of the L1 in gNB](SW-archi-graph.md)
......
...@@ -249,3 +249,71 @@ steps](../docker/README.md) and then use the docker-compose file directly. ...@@ -249,3 +249,71 @@ steps](../docker/README.md) and then use the docker-compose file directly.
Some tests are run from source (e.g. Some tests are run from source (e.g.
`ci-scripts/xml_files/gnb_phytest_usrp_run.xml`), which directly give the `ci-scripts/xml_files/gnb_phytest_usrp_run.xml`), which directly give the
options they are run with. options they are run with.
## How to retrieve core dumps (for CI team members)
The entrypoint scripts of all containers print the core pattern that is used on
the running machine. Search for `core_pattern` at the start of the container
logs to retrieve the possible location. Possible locations might be:
- a path: the corresponding directory must be mounted in the container to be
writable
- systemd-coredumpd: see [documentation](https://systemd.io/COREDUMP/)
- abrt: see [documentation](https://abrt.readthedocs.io/en/latest/usage.html)
- apport: see [documentation](https://wiki.ubuntu.com/Apport)
You furthermore have to extract the executable that caused the core dump.
Download the container image, and extract, e.g.:
```
docker create --name c1 porcepix.sboai.cs.eurecom.fr/oai-gnb:develop-c99db698
docker cp c1:/opt/oai-gnb/bin/nr-softmodem /tmp
docker rm c1
```
### Core dump in a file
**This is not recommended, as files could pile up and fill the system disk
completely!** Prefer systemd or abrt instead.
If the core pattern is a path: it should at least include the time in the
pattern name (suggested pattern: `/tmp/core.%e.%p.%t`) to correlate the time
the segfault occurred with the CI logs. If you identified the core dump,
copy the core dump from that machine; if identification is difficult, consider
rerunning the pipeline.
### Core dump via systemd
Run this command to list all core dumps:
```
sudo coredumpctl list
```
Scroll to the end and find the core dump of interest (it lists the executables
in the last column; use the time to correlate the segfault and the CI run).
Take the PID of the executable (first column after the time). Dump the core
dump to a location of your choice:
```
sudo coredumpctl dump <PID> > /tmp/coredump
```
### Core dump via abrt (automatic bug reporting tool)
TBD: use the documentation page for the moment.
### Core dump via apport
On Ubuntu machines, apport first needs to be enabled to collect core dumps:
```
sudo systemctl enable apport.service
```
and [needs to be enabled](https://wiki.ubuntu.com/Apport#How_to_enable_apport).
Then, show a list of core dumps using
```
sudo apport-cli
```
...@@ -58,6 +58,12 @@ RUN rm -f /etc/rhsm-host && \ ...@@ -58,6 +58,12 @@ RUN rm -f /etc/rhsm-host && \
echo "/usr/local/lib" > /etc/ld.so.conf.d/local-lib.conf && \ echo "/usr/local/lib" > /etc/ld.so.conf.d/local-lib.conf && \
echo "/usr/local/lib64" >> /etc/ld.so.conf.d/local-lib.conf echo "/usr/local/lib64" >> /etc/ld.so.conf.d/local-lib.conf
# Add "Tini - A tiny but valid init for containers", https://github.com/krallin/tini
# it will be copied into target containers, to print exit numbers and handle signals properly
ENV TINI_VERSION v0.19.0
ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini /tini
RUN chmod +x /tini
# In some network environments, GIT proxy is required # In some network environments, GIT proxy is required
RUN /bin/bash -c "if [[ -v NEEDED_GIT_PROXY ]]; then git config --global http.proxy $NEEDED_GIT_PROXY; fi" RUN /bin/bash -c "if [[ -v NEEDED_GIT_PROXY ]]; then git config --global http.proxy $NEEDED_GIT_PROXY; fi"
......
...@@ -46,6 +46,12 @@ RUN dnf install 'dnf-command(config-manager)' -y && \ ...@@ -46,6 +46,12 @@ RUN dnf install 'dnf-command(config-manager)' -y && \
python3-pip && \ python3-pip && \
pip3 install --ignore-installed pyyaml pip3 install --ignore-installed pyyaml
# Add "Tini - A tiny but valid init for containers", https://github.com/krallin/tini
# it will be copied into target containers, to print exit numbers and handle signals properly
ENV TINI_VERSION v0.19.0
ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini /tini
RUN chmod +x /tini
#create the WORKDIR #create the WORKDIR
WORKDIR /oai-ran WORKDIR /oai-ran
COPY . . COPY . .
......
...@@ -46,6 +46,12 @@ RUN apt-get update && \ ...@@ -46,6 +46,12 @@ RUN apt-get update && \
python3-pip && \ python3-pip && \
pip3 install --ignore-installed pyyaml pip3 install --ignore-installed pyyaml
# Add "Tini - A tiny but valid init for containers", https://github.com/krallin/tini
# it will be copied into target containers, to print exit numbers and handle signals properly
ENV TINI_VERSION v0.19.0
ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini /tini
RUN chmod +x /tini
# In some network environments, GIT proxy is required # In some network environments, GIT proxy is required
RUN /bin/bash -c "if [[ -v NEEDED_GIT_PROXY ]]; then git config --global http.proxy $NEEDED_GIT_PROXY; fi" RUN /bin/bash -c "if [[ -v NEEDED_GIT_PROXY ]]; then git config --global http.proxy $NEEDED_GIT_PROXY; fi"
......
...@@ -73,6 +73,12 @@ RUN apt-get update && \ ...@@ -73,6 +73,12 @@ RUN apt-get update && \
g++-9-aarch64-linux-gnu && \ g++-9-aarch64-linux-gnu && \
apt-get clean apt-get clean
# Add "Tini - A tiny but valid init for containers", https://github.com/krallin/tini
# it will be copied into target containers, to print exit numbers and handle signals properly
ENV TINI_VERSION v0.19.0
ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini /tini
RUN chmod +x /tini
# create the WORKDIR # create the WORKDIR
WORKDIR /oai-ran WORKDIR /oai-ran
COPY . . COPY . .
......
...@@ -112,5 +112,6 @@ WORKDIR /opt/oai-enb ...@@ -112,5 +112,6 @@ WORKDIR /opt/oai-enb
# 36422 --> X2C, SCTP/UDP # 36422 --> X2C, SCTP/UDP
EXPOSE 2152/udp 36412/udp 36422/udp EXPOSE 2152/udp 36412/udp 36422/udp
ENTRYPOINT ["/opt/oai-enb/bin/entrypoint.sh"] COPY --from=enb-base /tini /tini
ENTRYPOINT ["/tini", "-v", "--", "/opt/oai-enb/bin/entrypoint.sh"]
CMD ["/opt/oai-enb/bin/lte-softmodem", "-O", "/opt/oai-enb/etc/enb.conf"] CMD ["/opt/oai-enb/bin/lte-softmodem", "-O", "/opt/oai-enb/etc/enb.conf"]
...@@ -122,5 +122,6 @@ WORKDIR /opt/oai-enb ...@@ -122,5 +122,6 @@ WORKDIR /opt/oai-enb
# 36422 --> X2C, SCTP/UDP # 36422 --> X2C, SCTP/UDP
EXPOSE 2152/udp 36412/udp 36422/udp EXPOSE 2152/udp 36412/udp 36422/udp
ENTRYPOINT ["/opt/oai-enb/bin/entrypoint.sh"] COPY --from=enb-base /tini /tini
ENTRYPOINT ["/tini", "-v", "--", "/opt/oai-enb/bin/entrypoint.sh"]
CMD ["/opt/oai-enb/bin/lte-softmodem", "-O", "/opt/oai-enb/etc/enb.conf"] CMD ["/opt/oai-enb/bin/lte-softmodem", "-O", "/opt/oai-enb/etc/enb.conf"]
...@@ -112,5 +112,6 @@ EXPOSE 2152/udp 36412/udp 36422/udp ...@@ -112,5 +112,6 @@ EXPOSE 2152/udp 36412/udp 36422/udp
#EXPOSE 50000/udp # IF5 / ORI (control) #EXPOSE 50000/udp # IF5 / ORI (control)
#EXPOSE 50001/udp # IF5 / ECPRI (data) #EXPOSE 50001/udp # IF5 / ECPRI (data)
ENTRYPOINT ["/opt/oai-enb/bin/entrypoint.sh"] COPY --from=enb-base /tini /tini
ENTRYPOINT ["/tini", "-v", "--", "/opt/oai-enb/bin/entrypoint.sh"]
CMD ["/opt/oai-enb/bin/lte-softmodem", "-O", "/opt/oai-enb/etc/enb.conf"] CMD ["/opt/oai-enb/bin/lte-softmodem", "-O", "/opt/oai-enb/etc/enb.conf"]
...@@ -86,5 +86,6 @@ RUN ln -s /usr/local/lib/libaw2sori_transpro.so /usr/local/lib/libthirdparty_tra ...@@ -86,5 +86,6 @@ RUN ln -s /usr/local/lib/libaw2sori_transpro.so /usr/local/lib/libthirdparty_tra
WORKDIR /opt/oai-gnb-aw2s WORKDIR /opt/oai-gnb-aw2s
ENTRYPOINT ["/opt/oai-gnb-aw2s/bin/entrypoint.sh"] COPY --from=gnb-base /tini /tini
ENTRYPOINT ["/tini", "-v", "--", "/opt/oai-gnb-aw2s/bin/entrypoint.sh"]
CMD ["/opt/oai-gnb-aw2s/bin/nr-softmodem", "-O", "/opt/oai-gnb-aw2s/etc/gnb.conf"] CMD ["/opt/oai-gnb-aw2s/bin/nr-softmodem", "-O", "/opt/oai-gnb-aw2s/etc/gnb.conf"]
...@@ -95,5 +95,6 @@ RUN ln -s /usr/local/lib/libaw2sori_transpro.so /usr/local/lib/libthirdparty_tra ...@@ -95,5 +95,6 @@ RUN ln -s /usr/local/lib/libaw2sori_transpro.so /usr/local/lib/libthirdparty_tra
WORKDIR /opt/oai-gnb-aw2s WORKDIR /opt/oai-gnb-aw2s
ENTRYPOINT ["/opt/oai-gnb-aw2s/bin/entrypoint.sh"] COPY --from=gnb-base /tini /tini
ENTRYPOINT ["/tini", "-v", "--", "/opt/oai-gnb-aw2s/bin/entrypoint.sh"]
CMD ["/opt/oai-gnb-aw2s/bin/nr-softmodem", "-O", "/opt/oai-gnb-aw2s/etc/gnb.conf"] CMD ["/opt/oai-gnb-aw2s/bin/nr-softmodem", "-O", "/opt/oai-gnb-aw2s/etc/gnb.conf"]
...@@ -81,5 +81,6 @@ RUN /bin/bash -c "ln -s /usr/local/lib/libaw2sori_transpro.so /usr/local/lib/lib ...@@ -81,5 +81,6 @@ RUN /bin/bash -c "ln -s /usr/local/lib/libaw2sori_transpro.so /usr/local/lib/lib
WORKDIR /opt/oai-gnb-aw2s WORKDIR /opt/oai-gnb-aw2s
ENTRYPOINT ["/opt/oai-gnb-aw2s/bin/entrypoint.sh"] COPY --from=gnb-base /tini /tini
ENTRYPOINT ["/tini", "-v", "--", "/opt/oai-gnb-aw2s/bin/entrypoint.sh"]
CMD ["/opt/oai-gnb-aw2s/bin/nr-softmodem", "-O", "/opt/oai-gnb-aw2s/etc/gnb.conf"] CMD ["/opt/oai-gnb-aw2s/bin/nr-softmodem", "-O", "/opt/oai-gnb-aw2s/etc/gnb.conf"]
...@@ -111,5 +111,6 @@ WORKDIR /opt/oai-gnb ...@@ -111,5 +111,6 @@ WORKDIR /opt/oai-gnb
#EXPOSE 50000/udp # IF5 / ORI (control) #EXPOSE 50000/udp # IF5 / ORI (control)
#EXPOSE 50001/udp # IF5 / ECPRI (data) #EXPOSE 50001/udp # IF5 / ECPRI (data)
ENTRYPOINT ["/opt/oai-gnb/bin/entrypoint.sh"] COPY --from=gnb-base /tini /tini
ENTRYPOINT ["/tini", "-v", "--", "/opt/oai-gnb/bin/entrypoint.sh"]
CMD ["/opt/oai-gnb/bin/nr-softmodem", "-O", "/opt/oai-gnb/etc/gnb.conf"] CMD ["/opt/oai-gnb/bin/nr-softmodem", "-O", "/opt/oai-gnb/etc/gnb.conf"]
...@@ -121,5 +121,6 @@ WORKDIR /opt/oai-gnb ...@@ -121,5 +121,6 @@ WORKDIR /opt/oai-gnb
#EXPOSE 50000/udp # IF5 / ORI (control) #EXPOSE 50000/udp # IF5 / ORI (control)
#EXPOSE 50001/udp # IF5 / ECPRI (data) #EXPOSE 50001/udp # IF5 / ECPRI (data)
ENTRYPOINT ["/opt/oai-gnb/bin/entrypoint.sh"] COPY --from=gnb-base /tini /tini
ENTRYPOINT ["/tini", "-v", "--", "/opt/oai-gnb/bin/entrypoint.sh"]
CMD ["/opt/oai-gnb/bin/nr-softmodem", "-O", "/opt/oai-gnb/etc/gnb.conf"] CMD ["/opt/oai-gnb/bin/nr-softmodem", "-O", "/opt/oai-gnb/etc/gnb.conf"]
...@@ -108,5 +108,6 @@ WORKDIR /opt/oai-gnb ...@@ -108,5 +108,6 @@ WORKDIR /opt/oai-gnb
#EXPOSE 50000/udp # IF5 / ORI (control) #EXPOSE 50000/udp # IF5 / ORI (control)
#EXPOSE 50001/udp # IF5 / ECPRI (data) #EXPOSE 50001/udp # IF5 / ECPRI (data)
ENTRYPOINT ["/opt/oai-gnb/bin/entrypoint.sh"] COPY --from=gnb-base /tini /tini
ENTRYPOINT ["/tini", "-v", "--", "/opt/oai-gnb/bin/entrypoint.sh"]
CMD ["/opt/oai-gnb/bin/nr-softmodem", "-O", "/opt/oai-gnb/etc/gnb.conf"] CMD ["/opt/oai-gnb/bin/nr-softmodem", "-O", "/opt/oai-gnb/etc/gnb.conf"]
...@@ -95,5 +95,6 @@ RUN /bin/bash -c "ln -s /usr/local/lib/liboai_usrpdevif.so /usr/local/lib/liboai ...@@ -95,5 +95,6 @@ RUN /bin/bash -c "ln -s /usr/local/lib/liboai_usrpdevif.so /usr/local/lib/liboai
WORKDIR /opt/oai-lte-ru WORKDIR /opt/oai-lte-ru
ENTRYPOINT ["/opt/oai-lte-ru/bin/entrypoint.sh"] COPY --from=ru-base /tini /tini
ENTRYPOINT ["/tini", "-v", "--", "/opt/oai-lte-ru/bin/entrypoint.sh"]
CMD ["/opt/oai-lte-ru/bin/oairu", "-O", "/opt/oai-lte-ru/etc/rru.conf"] CMD ["/opt/oai-lte-ru/bin/oairu", "-O", "/opt/oai-lte-ru/etc/rru.conf"]
...@@ -88,5 +88,6 @@ RUN /bin/bash -c "ln -s /usr/local/lib/liboai_usrpdevif.so /usr/local/lib/liboai ...@@ -88,5 +88,6 @@ RUN /bin/bash -c "ln -s /usr/local/lib/liboai_usrpdevif.so /usr/local/lib/liboai
WORKDIR /opt/oai-lte-ru WORKDIR /opt/oai-lte-ru
ENTRYPOINT ["/opt/oai-lte-ru/bin/entrypoint.sh"] COPY --from=ru-base /tini /tini
ENTRYPOINT ["/tini", "-v", "--", "/opt/oai-lte-ru/bin/entrypoint.sh"]
CMD ["/opt/oai-lte-ru/bin/oairu", "-O", "/opt/oai-lte-ru/etc/rru.conf"] CMD ["/opt/oai-lte-ru/bin/oairu", "-O", "/opt/oai-lte-ru/etc/rru.conf"]
...@@ -104,5 +104,6 @@ RUN /bin/bash -c "ln -s /usr/local/lib/liboai_usrpdevif.so /usr/local/lib/liboai ...@@ -104,5 +104,6 @@ RUN /bin/bash -c "ln -s /usr/local/lib/liboai_usrpdevif.so /usr/local/lib/liboai
ldconfig ldconfig
WORKDIR /opt/oai-lte-ue WORKDIR /opt/oai-lte-ue
COPY --from=lte-ue-base /tini /tini
CMD ["/opt/oai-lte-ue/bin/lte-uesoftmodem"] CMD ["/opt/oai-lte-ue/bin/lte-uesoftmodem"]
ENTRYPOINT ["/opt/oai-lte-ue/bin/entrypoint.sh"] ENTRYPOINT ["/tini", "-v", "--", "/opt/oai-lte-ue/bin/entrypoint.sh"]
...@@ -116,5 +116,6 @@ RUN /bin/bash -c "ln -s /usr/local/lib/liboai_usrpdevif.so /usr/local/lib/liboai ...@@ -116,5 +116,6 @@ RUN /bin/bash -c "ln -s /usr/local/lib/liboai_usrpdevif.so /usr/local/lib/liboai
echo "ldd on libtelnetsrv.so" && ldd /usr/local/lib/libtelnetsrv.so echo "ldd on libtelnetsrv.so" && ldd /usr/local/lib/libtelnetsrv.so
WORKDIR /opt/oai-lte-ue WORKDIR /opt/oai-lte-ue
COPY --from=lte-ue-base /tini /tini
CMD ["/opt/oai-lte-ue/bin/lte-uesoftmodem"] CMD ["/opt/oai-lte-ue/bin/lte-uesoftmodem"]
ENTRYPOINT ["/opt/oai-lte-ue/bin/entrypoint.sh"] ENTRYPOINT ["/tini", "-v", "--", "/opt/oai-lte-ue/bin/entrypoint.sh"]
...@@ -104,5 +104,6 @@ RUN /bin/bash -c "ln -s /usr/local/lib/liboai_usrpdevif.so /usr/local/lib/liboai ...@@ -104,5 +104,6 @@ RUN /bin/bash -c "ln -s /usr/local/lib/liboai_usrpdevif.so /usr/local/lib/liboai
ldd /opt/oai-lte-ue/bin/lte-uesoftmodem ldd /opt/oai-lte-ue/bin/lte-uesoftmodem
WORKDIR /opt/oai-lte-ue WORKDIR /opt/oai-lte-ue
COPY --from=lte-ue-base /tini /tini
CMD ["/opt/oai-lte-ue/bin/lte-uesoftmodem"] CMD ["/opt/oai-lte-ue/bin/lte-uesoftmodem"]
ENTRYPOINT ["/opt/oai-lte-ue/bin/entrypoint.sh"] ENTRYPOINT ["/tini", "-v", "--", "/opt/oai-lte-ue/bin/entrypoint.sh"]
...@@ -75,5 +75,6 @@ WORKDIR /opt/oai-gnb/etc ...@@ -75,5 +75,6 @@ WORKDIR /opt/oai-gnb/etc
WORKDIR /opt/oai-gnb WORKDIR /opt/oai-gnb
ENTRYPOINT ["/opt/oai-gnb/bin/entrypoint.sh"] COPY --from=gnb-base /tini /tini
ENTRYPOINT ["/tini", "-v", "--", "/opt/oai-gnb/bin/entrypoint.sh"]
CMD ["/opt/oai-gnb/bin/nr-cuup", "-O", "/opt/oai-gnb/etc/gnb.conf"] CMD ["/opt/oai-gnb/bin/nr-cuup", "-O", "/opt/oai-gnb/etc/gnb.conf"]
...@@ -76,5 +76,6 @@ WORKDIR /opt/oai-gnb/etc ...@@ -76,5 +76,6 @@ WORKDIR /opt/oai-gnb/etc
WORKDIR /opt/oai-gnb WORKDIR /opt/oai-gnb
ENTRYPOINT ["/opt/oai-gnb/bin/entrypoint.sh"] COPY --from=gnb-base /tini /tini
ENTRYPOINT ["/tini", "-v", "--", "/opt/oai-gnb/bin/entrypoint.sh"]
CMD ["/opt/oai-gnb/bin/nr-cuup", "-O", "/opt/oai-gnb/etc/gnb.conf"] CMD ["/opt/oai-gnb/bin/nr-cuup", "-O", "/opt/oai-gnb/etc/gnb.conf"]
...@@ -66,5 +66,6 @@ RUN ldconfig && ldd /opt/oai-gnb/bin/nr-cuup ...@@ -66,5 +66,6 @@ RUN ldconfig && ldd /opt/oai-gnb/bin/nr-cuup
WORKDIR /opt/oai-gnb/etc WORKDIR /opt/oai-gnb/etc
WORKDIR /opt/oai-gnb WORKDIR /opt/oai-gnb
ENTRYPOINT ["/opt/oai-gnb/bin/entrypoint.sh"] COPY --from=gnb-base /tini /tini
ENTRYPOINT ["/tini", "-v", "--", "/opt/oai-gnb/bin/entrypoint.sh"]
CMD ["/opt/oai-gnb/bin/nr-cuup", "-O", "/opt/oai-gnb/etc/gnb.conf"] CMD ["/opt/oai-gnb/bin/nr-cuup", "-O", "/opt/oai-gnb/etc/gnb.conf"]
...@@ -108,5 +108,6 @@ RUN /bin/bash -c "ln -s /usr/local/lib/liboai_usrpdevif.so /usr/local/lib/liboai ...@@ -108,5 +108,6 @@ RUN /bin/bash -c "ln -s /usr/local/lib/liboai_usrpdevif.so /usr/local/lib/liboai
WORKDIR /opt/oai-nr-ue WORKDIR /opt/oai-nr-ue
COPY --from=nr-ue-base /tini /tini
CMD ["/opt/oai-nr-ue/bin/nr-uesoftmodem", "-O", "/opt/oai-nr-ue/etc/nr-ue.conf"] CMD ["/opt/oai-nr-ue/bin/nr-uesoftmodem", "-O", "/opt/oai-nr-ue/etc/nr-ue.conf"]
ENTRYPOINT ["/opt/oai-nr-ue/bin/entrypoint.sh"] ENTRYPOINT ["/tini", "-v", "--", "/opt/oai-nr-ue/bin/entrypoint.sh"]
...@@ -117,5 +117,6 @@ RUN /bin/bash -c "ln -s /usr/local/lib/liboai_usrpdevif.so /usr/local/lib/liboai ...@@ -117,5 +117,6 @@ RUN /bin/bash -c "ln -s /usr/local/lib/liboai_usrpdevif.so /usr/local/lib/liboai
echo "ldd on libtelnetsrv_5Gue.so" && ldd /usr/local/lib/libtelnetsrv_5Gue.so echo "ldd on libtelnetsrv_5Gue.so" && ldd /usr/local/lib/libtelnetsrv_5Gue.so
WORKDIR /opt/oai-nr-ue WORKDIR /opt/oai-nr-ue
COPY --from=nr-ue-base /tini /tini
CMD ["/opt/oai-nr-ue/bin/nr-uesoftmodem", "-O", "/opt/oai-nr-ue/etc/nr-ue.conf"] CMD ["/opt/oai-nr-ue/bin/nr-uesoftmodem", "-O", "/opt/oai-nr-ue/etc/nr-ue.conf"]
ENTRYPOINT ["/opt/oai-nr-ue/bin/entrypoint.sh"] ENTRYPOINT ["/tini", "-v", "--", "/opt/oai-nr-ue/bin/entrypoint.sh"]
...@@ -104,5 +104,6 @@ RUN /bin/bash -c "ln -s /usr/local/lib/liboai_usrpdevif.so /usr/local/lib/liboai ...@@ -104,5 +104,6 @@ RUN /bin/bash -c "ln -s /usr/local/lib/liboai_usrpdevif.so /usr/local/lib/liboai
ldd /opt/oai-nr-ue/bin/nr-uesoftmodem ldd /opt/oai-nr-ue/bin/nr-uesoftmodem
WORKDIR /opt/oai-nr-ue WORKDIR /opt/oai-nr-ue
COPY --from=nr-ue-base /tini /tini
CMD ["/opt/oai-nr-ue/bin/nr-uesoftmodem", "-O", "/opt/oai-nr-ue/etc/nr-ue.conf"] CMD ["/opt/oai-nr-ue/bin/nr-uesoftmodem", "-O", "/opt/oai-nr-ue/etc/nr-ue.conf"]
ENTRYPOINT ["/opt/oai-nr-ue/bin/entrypoint.sh"] ENTRYPOINT ["/tini", "-v", "--", "/opt/oai-nr-ue/bin/entrypoint.sh"]
...@@ -5,6 +5,9 @@ set -uo pipefail ...@@ -5,6 +5,9 @@ set -uo pipefail
PREFIX=/opt/oai-enb PREFIX=/opt/oai-enb
CONFIGFILE=$PREFIX/etc/enb.conf CONFIGFILE=$PREFIX/etc/enb.conf
echo "=================================="
echo "/proc/sys/kernel/core_pattern=$(cat /proc/sys/kernel/core_pattern)"
if [ ! -f $CONFIGFILE ]; then if [ ! -f $CONFIGFILE ]; then
echo "No configuration file found: please mount at $CONFIGFILE" echo "No configuration file found: please mount at $CONFIGFILE"
exit 255 exit 255
......
...@@ -5,6 +5,9 @@ set -uo pipefail ...@@ -5,6 +5,9 @@ set -uo pipefail
PREFIX=/opt/oai-gnb-aw2s PREFIX=/opt/oai-gnb-aw2s
CONFIGFILE=$PREFIX/etc/gnb.conf CONFIGFILE=$PREFIX/etc/gnb.conf
echo "=================================="
echo "/proc/sys/kernel/core_pattern=$(cat /proc/sys/kernel/core_pattern)"
if [ ! -f $CONFIGFILE ]; then if [ ! -f $CONFIGFILE ]; then
echo "No configuration file found: please mount at $CONFIGFILE" echo "No configuration file found: please mount at $CONFIGFILE"
exit 255 exit 255
......
...@@ -5,6 +5,8 @@ set -uo pipefail ...@@ -5,6 +5,8 @@ set -uo pipefail
PREFIX=/opt/oai-gnb PREFIX=/opt/oai-gnb
CONFIGFILE=$PREFIX/etc/gnb.conf CONFIGFILE=$PREFIX/etc/gnb.conf
echo "=================================="
echo "/proc/sys/kernel/core_pattern=$(cat /proc/sys/kernel/core_pattern)"
if [ ! -f $CONFIGFILE ]; then if [ ! -f $CONFIGFILE ]; then
echo "No configuration file found: please mount at $CONFIGFILE" echo "No configuration file found: please mount at $CONFIGFILE"
......
...@@ -5,6 +5,9 @@ set -uo pipefail ...@@ -5,6 +5,9 @@ set -uo pipefail
PREFIX=/opt/oai-lte-ru PREFIX=/opt/oai-lte-ru
CONFIGFILE=$PREFIX/etc/rru.conf CONFIGFILE=$PREFIX/etc/rru.conf
echo "=================================="
echo "/proc/sys/kernel/core_pattern=$(cat /proc/sys/kernel/core_pattern)"
if [ ! -f $CONFIGFILE ]; then if [ ! -f $CONFIGFILE ]; then
echo "No configuration file found: please mount at $CONFIGFILE" echo "No configuration file found: please mount at $CONFIGFILE"
exit 255 exit 255
......
...@@ -5,6 +5,9 @@ set -uo pipefail ...@@ -5,6 +5,9 @@ set -uo pipefail
PREFIX=/opt/oai-lte-ue PREFIX=/opt/oai-lte-ue
USIM_CONFIGFILE=$PREFIX/etc/ue_usim.conf USIM_CONFIGFILE=$PREFIX/etc/ue_usim.conf
echo "=================================="
echo "/proc/sys/kernel/core_pattern=$(cat /proc/sys/kernel/core_pattern)"
if [ ! -f $USIM_CONFIGFILE ]; then if [ ! -f $USIM_CONFIGFILE ]; then
echo "No ue_usim.conf configuration file found: please mount at $USIM_CONFIGFILE" echo "No ue_usim.conf configuration file found: please mount at $USIM_CONFIGFILE"
exit 255 exit 255
......
...@@ -5,6 +5,9 @@ set -uo pipefail ...@@ -5,6 +5,9 @@ set -uo pipefail
PREFIX=/opt/oai-nr-ue PREFIX=/opt/oai-nr-ue
CONFIGFILE=$PREFIX/etc/nr-ue.conf CONFIGFILE=$PREFIX/etc/nr-ue.conf
echo "=================================="
echo "/proc/sys/kernel/core_pattern=$(cat /proc/sys/kernel/core_pattern)"
if [ ! -f $CONFIGFILE ]; then if [ ! -f $CONFIGFILE ]; then
echo "No configuration file found: please mount at $CONFIGFILE" echo "No configuration file found: please mount at $CONFIGFILE"
exit 255 exit 255
......
...@@ -103,7 +103,6 @@ struct timing_info_t { ...@@ -103,7 +103,6 @@ struct timing_info_t {
} timing_info; } timing_info;
// Fix per CC openair rf/if device update // Fix per CC openair rf/if device update
// extern openair0_device openair0;
extern int oai_exit; extern int oai_exit;
......
...@@ -808,26 +808,31 @@ void tx_rf(RU_t *ru, ...@@ -808,26 +808,31 @@ void tx_rf(RU_t *ru,
/* add fail safe for late command end */ /* add fail safe for late command end */
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE, 1 ); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE, 1 );
// prepare tx buffer pointers // prepare tx buffer pointers
txs = ru->rfdevice.trx_write_func(&ru->rfdevice, txs = ru->rfdevice
timestamp+ru->ts_offset-ru->openair0_cfg.tx_sample_advance-sf_extension, .trx_write_func(&ru->rfdevice, timestamp + ru->ts_offset - sf_extension, txp, siglen + sf_extension, ru->nb_tx, flags);
txp, ru->south_out_cnt++;
siglen+sf_extension, LOG_D(PHY, "south_out_cnt %d\n", ru->south_out_cnt);
ru->nb_tx, int se = dB_fixed(signal_energy(txp[0], siglen + sf_extension));
flags);
ru->south_out_cnt++; if (SF_type == SF_S)
LOG_D(PHY,"south_out_cnt %d\n",ru->south_out_cnt); LOG_D(PHY,
int se = dB_fixed(signal_energy(txp[0],siglen+sf_extension)); "[TXPATH] RU %d tx_rf (en %d,len %d), writing to TS %llu, frame %d, unwrapped_frame %d, subframe %d\n",
ru->idx,
if (SF_type == SF_S) LOG_D(PHY,"[TXPATH] RU %d tx_rf (en %d,len %d), writing to TS %llu, frame %d, unwrapped_frame %d, subframe %d\n",ru->idx, se, se,
siglen+sf_extension, (long long unsigned int)timestamp, frame, proc->frame_tx_unwrap, subframe); siglen + sf_extension,
(long long unsigned int)timestamp,
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE, 0 ); frame,
proc->frame_tx_unwrap,
// AssertFatal(txs == siglen+sf_extension,"TX : Timeout (sent %d/%d)\n",txs, siglen); subframe);
if( usrp_tx_thread == 0 && (txs != siglen+sf_extension) && (late_control==STATE_BURST_NORMAL) ) { /* add fail safe for late command */
late_control=STATE_BURST_TERMINATE; VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE, 0);
LOG_E(PHY,"TX : Timeout (sent %d/%d) state =%d\n",txs, siglen,late_control);
} // AssertFatal(txs == siglen+sf_extension,"TX : Timeout (sent %d/%d)\n",txs, siglen);
if (usrp_tx_thread == 0 && (txs != siglen + sf_extension)
&& (late_control == STATE_BURST_NORMAL)) { /* add fail safe for late command */
late_control = STATE_BURST_TERMINATE;
LOG_E(PHY, "TX : Timeout (sent %d/%d) state =%d\n", txs, siglen, late_control);
}
} else if (IS_SOFTMODEM_RFSIM ) { } else if (IS_SOFTMODEM_RFSIM ) {
// in case of rfsim, we always enable tx because we need to feed rx of the opposite side // in case of rfsim, we always enable tx because we need to feed rx of the opposite side
// we write 1 single I/Q sample to trigger Rx (rfsim will fill gaps with 0 I/Q) // we write 1 single I/Q sample to trigger Rx (rfsim will fill gaps with 0 I/Q)
...@@ -836,15 +841,15 @@ void tx_rf(RU_t *ru, ...@@ -836,15 +841,15 @@ void tx_rf(RU_t *ru,
memset(dummy_tx_data,0,sizeof(dummy_tx_data)); memset(dummy_tx_data,0,sizeof(dummy_tx_data));
for (int i=0; i<ru->frame_parms->nb_antennas_tx; i++) for (int i=0; i<ru->frame_parms->nb_antennas_tx; i++)
dummy_tx[i]= dummy_tx_data[i]; dummy_tx[i]= dummy_tx_data[i];
AssertFatal( 1 == AssertFatal(1
ru->rfdevice.trx_write_func(&ru->rfdevice, == ru->rfdevice.trx_write_func(&ru->rfdevice,
timestamp+ru->ts_offset-ru->openair0_cfg.tx_sample_advance-sf_extension, timestamp + ru->ts_offset - sf_extension,
dummy_tx, dummy_tx,
1, 1,
ru->frame_parms->nb_antennas_tx, ru->frame_parms->nb_antennas_tx,
4),""); 4),
"");
} }
} }
......
...@@ -74,15 +74,7 @@ ...@@ -74,15 +74,7 @@
#define CONFIG_HLP_DLSHIFT "dynamic shift for LLR compuation for TM3/4 (default 0)\n" #define CONFIG_HLP_DLSHIFT "dynamic shift for LLR compuation for TM3/4 (default 0)\n"
#define CONFIG_HLP_USRP_ARGS "set the arguments to identify USRP (same syntax as in UHD)\n" #define CONFIG_HLP_USRP_ARGS "set the arguments to identify USRP (same syntax as in UHD)\n"
#define CONFIG_HLP_DMAMAP "use DMA memory mapping\n" #define CONFIG_HLP_DMAMAP "use DMA memory mapping\n"
#define CONFIG_HLP_TDD "Set hardware to TDD mode (default: FDD). Used only with -U (otherwise set in config file).\n" #define CONFIG_HLP_TDD "Set hardware to TDD mode (default: FDD). Used only with -U (otherwise set in config file).\n"
#define CONFIG_HLP_TADV "Set timing_advance\n"
/*-------------------------------------------------------------------------------------------------------------------------------------------------------*/ /*-------------------------------------------------------------------------------------------------------------------------------------------------------*/
/* command line parameters specific to UE */ /* command line parameters specific to UE */
...@@ -106,7 +98,6 @@ ...@@ -106,7 +98,6 @@
{"usrp-args", CONFIG_HLP_USRP_ARGS, 0, .strptr=&usrp_args, .defstrval="type=b200",TYPE_STRING, 0}, \ {"usrp-args", CONFIG_HLP_USRP_ARGS, 0, .strptr=&usrp_args, .defstrval="type=b200",TYPE_STRING, 0}, \
{"mmapped-dma", CONFIG_HLP_DMAMAP, PARAMFLAG_BOOL, .uptr=&mmapped_dma, .defintval=0, TYPE_INT, 0}, \ {"mmapped-dma", CONFIG_HLP_DMAMAP, PARAMFLAG_BOOL, .uptr=&mmapped_dma, .defintval=0, TYPE_INT, 0}, \
{"T" , CONFIG_HLP_TDD, PARAMFLAG_BOOL, .iptr=&tddflag, .defintval=0, TYPE_INT, 0}, \ {"T" , CONFIG_HLP_TDD, PARAMFLAG_BOOL, .iptr=&tddflag, .defintval=0, TYPE_INT, 0}, \
{"A", CONFIG_HLP_TADV, 0, .iptr=&(timingadv), .defintval=0, TYPE_INT, 0}, \
{"ue-idx-standalone", NULL, 0, .u16ptr=&ue_idx_standalone, .defuintval=0xFFFF, TYPE_UINT16, 0}, \ {"ue-idx-standalone", NULL, 0, .u16ptr=&ue_idx_standalone, .defuintval=0xFFFF, TYPE_UINT16, 0}, \
{"node-number", NULL, 0, .u16ptr=&node_number, .defuintval=2, TYPE_UINT16, 0}, \ {"node-number", NULL, 0, .u16ptr=&node_number, .defuintval=2, TYPE_UINT16, 0}, \
} }
...@@ -179,9 +170,6 @@ extern void init_UE(int nb_inst, ...@@ -179,9 +170,6 @@ extern void init_UE(int nb_inst,
extern void init_thread(int sched_runtime, int sched_deadline, int sched_fifo, cpu_set_t *cpuset, char *name); extern void init_thread(int sched_runtime, int sched_deadline, int sched_fifo, cpu_set_t *cpuset, char *name);
extern void init_ocm(void);
extern void init_ue_devices(PHY_VARS_UE *);
PHY_VARS_UE *init_ue_vars(LTE_DL_FRAME_PARMS *frame_parms, uint8_t UE_id, uint8_t abstraction_flag); PHY_VARS_UE *init_ue_vars(LTE_DL_FRAME_PARMS *frame_parms, uint8_t UE_id, uint8_t abstraction_flag);
void init_eNB_afterRU(void); void init_eNB_afterRU(void);
......
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.
This diff is collapsed.
This diff is collapsed.
flexric @ 7c424e88
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