Compare commits
93 Commits
dumb-cross
...
IAB-Eureco
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d2f69a57a2 | ||
|
|
6477338da3 | ||
|
|
9512843137 | ||
|
|
fbe7e6b731 | ||
|
|
e40b128f3f | ||
|
|
c4d96c8bfd | ||
|
|
8fe9df7bf3 | ||
|
|
06dd13d348 | ||
|
|
070ae03629 | ||
|
|
f6b422989a | ||
|
|
b1bb36a340 | ||
|
|
2dc0a8d75c | ||
|
|
0d56b3ce43 | ||
|
|
1d3c539ce2 | ||
|
|
bf02d4c897 | ||
|
|
6483ae6383 | ||
|
|
0a22f997cb | ||
|
|
8a924cd011 | ||
|
|
3d3d403614 | ||
|
|
9ee12ae551 | ||
|
|
8a5f54961f | ||
|
|
f1b0cde103 | ||
|
|
b99e856733 | ||
|
|
543250e933 | ||
|
|
fca1561bf7 | ||
|
|
fc97e197fa | ||
|
|
2653897689 | ||
|
|
56acd1d6d3 | ||
|
|
adbb051bb7 | ||
|
|
d7c3806f13 | ||
|
|
549652353b | ||
|
|
331fb1ce8e | ||
|
|
3c1ed92b80 | ||
|
|
d5eb5ee0f2 | ||
|
|
e9f0541ad0 | ||
|
|
961981f456 | ||
|
|
b7a1b4b405 | ||
|
|
58c2f04b40 | ||
|
|
d60273e200 | ||
|
|
6c015f8099 | ||
|
|
9a44d4b88f | ||
|
|
29ca077b66 | ||
|
|
64e58c1d67 | ||
|
|
d56c7dfc07 | ||
|
|
be0217aabf | ||
|
|
ebe1b711ac | ||
|
|
2962340a8b | ||
|
|
50d4d489f7 | ||
|
|
c92cbe67b5 | ||
|
|
7466297568 | ||
|
|
bedc5bea4c | ||
|
|
d26f0b9196 | ||
|
|
a724dfba4f | ||
|
|
b431e1442f | ||
|
|
4cfba89e68 | ||
|
|
9af386c761 | ||
|
|
e845a9c3b7 | ||
|
|
56c4a6ec07 | ||
|
|
28e13fc6ac | ||
|
|
2a35d5c2f9 | ||
|
|
40987702b4 | ||
|
|
b94dd49ace | ||
|
|
01722ff8fa | ||
|
|
60447a24a1 | ||
|
|
06c2ce1777 | ||
|
|
ffd176e9d5 | ||
|
|
72166d7ae9 | ||
|
|
2a078c757b | ||
|
|
cd5209a782 | ||
|
|
c83ff4c388 | ||
|
|
4ae0fd09f1 | ||
|
|
3efb5b3657 | ||
|
|
1f81b3f1a2 | ||
|
|
b1f9e9d57a | ||
|
|
b6087da1b2 | ||
|
|
f392158c40 | ||
|
|
ea0185f84e | ||
|
|
8666b084d5 | ||
|
|
948188b200 | ||
|
|
edb2dd7d6d | ||
|
|
bc0cab7a08 | ||
|
|
4a8815a41e | ||
|
|
1b237f6abe | ||
|
|
1adcd3fb5a | ||
|
|
10a6ce8bdd | ||
|
|
29bc4101cc | ||
|
|
563109a88f | ||
|
|
ff7c960b2c | ||
|
|
3d8b38f7e6 | ||
|
|
c78399ee36 | ||
|
|
be36b2f9bc | ||
|
|
9f315932d0 | ||
|
|
fd8fc31a6f |
@@ -498,6 +498,7 @@ target_link_libraries(shlib_loader PRIVATE CONFIG_LIB)
|
||||
##########################################################
|
||||
|
||||
add_boolean_option(ENABLE_LDPC_T2 OFF "Build support for LDPC Offload to T2 library" OFF)
|
||||
set(ENV{PKG_CONFIG_PATH} "$ENV{PKG_CONFIG_PATH}:/usr/local/lib/x86_64-linux-gnu/pkgconfig")
|
||||
if (ENABLE_LDPC_T2)
|
||||
pkg_check_modules(LIBDPDK_T2 REQUIRED libdpdk=20.11.9)
|
||||
find_library(PMD_T2 NAMES rte_baseband_accl_ldpc HINTS ${LIBDPDK_T2_LIBRARY_DIRS})
|
||||
@@ -1435,8 +1436,7 @@ target_link_libraries(L2 PRIVATE asn1_lte_rrc_hdrs asn1_nr_rrc_hdrs)
|
||||
|
||||
if(E2_AGENT)
|
||||
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})
|
||||
target_compile_definitions(L2 PRIVATE ${E2AP_VERSION} ${KPM_VERSION} E2_AGENT)
|
||||
endif()
|
||||
|
||||
|
||||
@@ -1462,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)
|
||||
if(E2_AGENT)
|
||||
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 E2_AGENT)
|
||||
target_compile_definitions(L2_NR PRIVATE ${E2AP_VERSION} ${KPM_VERSION} E2_AGENT)
|
||||
endif()
|
||||
|
||||
add_library(L2_LTE_NR
|
||||
@@ -1982,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)
|
||||
|
||||
if(E2_AGENT)
|
||||
target_compile_definitions(lte-softmodem PRIVATE E2_AGENT)
|
||||
target_compile_definitions(lte-softmodem PRIVATE ${E2AP_VERSION} ${KPM_VERSION})
|
||||
target_compile_definitions(lte-softmodem PRIVATE ${E2AP_VERSION} ${KPM_VERSION} E2_AGENT)
|
||||
endif()
|
||||
|
||||
add_executable(oairu
|
||||
@@ -2081,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)
|
||||
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()
|
||||
|
||||
|
||||
@@ -2094,10 +2092,6 @@ endif()
|
||||
# force the generation of ASN.1 so that we don't need to wait during the build
|
||||
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)
|
||||
if(E2_AGENT)
|
||||
target_compile_definitions(nr-softmodem PRIVATE E2_AGENT)
|
||||
endif()
|
||||
|
||||
|
||||
add_executable(nr-cuup
|
||||
executables/nr-cuup.c
|
||||
|
||||
@@ -86,6 +86,12 @@ class Cmd(metaclass=abc.ABCMeta):
|
||||
return
|
||||
|
||||
class LocalCmd(Cmd):
|
||||
def __enter__(self):
|
||||
return self
|
||||
|
||||
def __exit__(self, exc_type, exc_value, exc_traceback):
|
||||
self.close()
|
||||
|
||||
def __init__(self, d = None):
|
||||
self.cwd = d
|
||||
if self.cwd is not None:
|
||||
@@ -122,12 +128,40 @@ class LocalCmd(Cmd):
|
||||
if src[0] != '/' or tgt[0] != '/':
|
||||
raise Exception('support only absolute file paths!')
|
||||
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):
|
||||
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):
|
||||
def __enter__(self):
|
||||
return self
|
||||
|
||||
def __exit__(self, exc_type, exc_value, exc_traceback):
|
||||
self.close()
|
||||
|
||||
def __init__(self, hostname, d=None):
|
||||
cIdx = 0
|
||||
logging.getLogger('paramiko').setLevel(logging.ERROR) # prevent spamming through Paramiko
|
||||
@@ -193,36 +227,38 @@ class RemoteCmd(Cmd):
|
||||
def getBefore(self):
|
||||
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):
|
||||
logging.debug(f"copyout: local:{src} -> remote:{tgt}")
|
||||
if recursive:
|
||||
tmpfile = f"{uuid.uuid4()}.tar"
|
||||
abstmpfile = f"/tmp/{tmpfile}"
|
||||
cmd = LocalCmd()
|
||||
cmd.run(f"tar -cf {abstmpfile} {src}")
|
||||
sftp = self.client.open_sftp()
|
||||
sftp.put(abstmpfile, abstmpfile)
|
||||
sftp.close()
|
||||
cmd.run(f"rm {abstmpfile}")
|
||||
self.run(f"mv {abstmpfile} {tgt}; cd {tgt} && tar -xf {tmpfile} && rm {tmpfile}")
|
||||
with LocalCmd() as cmd:
|
||||
if cmd.run(f"tar -cf {abstmpfile} {src}").returncode != 0:
|
||||
return False
|
||||
if not PutFile(self.client, abstmpfile, abstmpfile):
|
||||
return False
|
||||
cmd.run(f"rm {abstmpfile}")
|
||||
ret = self.run(f"mv {abstmpfile} {tgt}; cd {tgt} && tar -xf {tmpfile} && rm {tmpfile}")
|
||||
return ret.returncode == 0
|
||||
else:
|
||||
sftp = self.client.open_sftp()
|
||||
sftp.put(src, tgt)
|
||||
sftp.close()
|
||||
return PutFile(self.client, src, tgt)
|
||||
|
||||
# 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):
|
||||
logging.debug(f"copyin: remote:{src} -> local:{tgt}")
|
||||
if recursive:
|
||||
tmpfile = f"{uuid.uuid4()}.tar"
|
||||
abstmpfile = f"/tmp/{tmpfile}"
|
||||
self.run(f"tar -cf {abstmpfile} {src}")
|
||||
sftp = self.client.open_sftp()
|
||||
sftp.get(abstmpfile, abstmpfile)
|
||||
sftp.close()
|
||||
if self.run(f"tar -cf {abstmpfile} {src}").returncode != 0:
|
||||
return False
|
||||
if not GetFile(self.client, abstmpfile, abstmpfile):
|
||||
return False
|
||||
self.run(f"rm {abstmpfile}")
|
||||
cmd = LocalCmd()
|
||||
cmd.run(f"mv {abstmpfile} {tgt}; cd {tgt} && tar -xf {tmpfile} && rm {tmpfile}")
|
||||
with LocalCmd() as cmd:
|
||||
ret = cmd.run(f"mv {abstmpfile} {tgt}; cd {tgt} && tar -xf {tmpfile} && rm {tmpfile}")
|
||||
return ret.returncode == 0
|
||||
else:
|
||||
sftp = self.client.open_sftp()
|
||||
sftp.get(src, tgt)
|
||||
sftp.close()
|
||||
return GetFile(self.client, src, tgt)
|
||||
|
||||
@@ -662,22 +662,26 @@ class Containerize():
|
||||
collectInfo['proxy'] = files
|
||||
mySSH.command('docker image inspect --format=\'Size = {{.Size}} bytes\' proxy:' + tag, '\$', 5)
|
||||
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 = {}
|
||||
if result is not None:
|
||||
imageSize = float(result.group('size')) / 1000000
|
||||
logging.debug('\u001B[1m proxy size is ' + ('%.0f' % imageSize) + ' Mbytes\u001B[0m')
|
||||
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:
|
||||
logging.debug('proxy size is unknown')
|
||||
logging.error('proxy size is unknown')
|
||||
allImagesSize['proxy'] = 'unknown'
|
||||
|
||||
# Cleaning any created tmp volume
|
||||
mySSH.command(self.cli + ' volume prune --force || true','\$', 15)
|
||||
mySSH.close()
|
||||
|
||||
logging.info('\u001B[1m Building L2sim Proxy Image Pass\u001B[0m')
|
||||
HTML.CreateHtmlTestRow('commit ' + tag, 'OK', CONST.ALL_PROCESSES_OK)
|
||||
HTML.CreateHtmlNextTabHeaderTestRow(collectInfo, allImagesSize)
|
||||
logging.error('\u001B[1m Build of L2sim proxy failed\u001B[0m')
|
||||
HTML.CreateHtmlTestRow('commit ' + tag, 'KO', CONST.ALL_PROCESSES_OK)
|
||||
HTML.CreateHtmlTabFooter(False)
|
||||
return False
|
||||
|
||||
def BuildRunTests(self, HTML):
|
||||
if self.ranRepository == '' or self.ranBranch == '' or self.ranCommitID == '':
|
||||
@@ -951,12 +955,12 @@ class Containerize():
|
||||
if svcName == '':
|
||||
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
|
||||
grep = ''
|
||||
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())
|
||||
unhealthyNb = 0
|
||||
healthyNb = 0
|
||||
@@ -1058,55 +1062,55 @@ class Containerize():
|
||||
if lIpAddr == '' or lUserName == '' or lPassWord == '' or lSourcePath == '':
|
||||
HELP.GenericHelp(CONST.Version)
|
||||
sys.exit('Insufficient Parameter')
|
||||
logging.debug('\u001B[1m Undeploying OAI Object from server: ' + lIpAddr + '\u001B[0m')
|
||||
mySSH = SSH.SSHConnection()
|
||||
mySSH.open(lIpAddr, lUserName, lPassWord)
|
||||
|
||||
mySSH.command('cd ' + lSourcePath + '/' + self.yamlPath[self.eNB_instance], '\$', 5)
|
||||
|
||||
logging.debug(f'\u001B[1m Undeploying OAI Object from server: {lIpAddr}\u001B[0m')
|
||||
mySSH = cls_cmd.getConnection(lIpAddr)
|
||||
yamlDir = f'{lSourcePath}/{self.yamlPath[self.eNB_instance]}'
|
||||
mySSH.run(f'cd {yamlDir}')
|
||||
svcName = self.services[self.eNB_instance]
|
||||
forceDown = False
|
||||
if svcName != '':
|
||||
logging.warning(f'service name given, but will stop all services in ci-docker-compose.yml!')
|
||||
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
|
||||
allServices = mySSH.getBefore().split('\r\n')[1:-1]
|
||||
allServices = ret.stdout.splitlines()
|
||||
services = []
|
||||
for s in allServices:
|
||||
mySSH.command(f'docker-compose -f ci-docker-compose.yml ps --all -- {s}', '\$', 5, silent=False)
|
||||
running = mySSH.getBefore().split('\r\n')[2:-1]
|
||||
# outputs the hash if the container is running
|
||||
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}')
|
||||
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)
|
||||
logging.info(f'stopping services {services}')
|
||||
|
||||
mySSH.command(f'docker-compose -f ci-docker-compose.yml stop -t3', '\$', 30)
|
||||
time.sleep(5) # give some time to running containers to stop
|
||||
mySSH.run(f'docker compose -f {yamlDir}/ci-docker-compose.yml stop -t3')
|
||||
copyin_res = True
|
||||
for svcName in services:
|
||||
# head -n -1 suppresses the final "X exited with status code Y"
|
||||
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.close()
|
||||
mySSH.run(f'docker compose -f {yamlDir}/ci-docker-compose.yml down -v')
|
||||
|
||||
# Analyzing log file!
|
||||
files = ','.join([f'{s}-{HTML.testCase_id}' for s in services])
|
||||
if len(services) > 1:
|
||||
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!'
|
||||
if not copyin_res:
|
||||
HTML.htmleNBFailureMsg='Could not copy logfile(s) to analyze it!'
|
||||
HTML.CreateHtmlTestRow('N/A', 'KO', CONST.ENB_PROCESS_NOLOGFILE_TO_ANALYZE)
|
||||
self.exitStatus = 1
|
||||
# use function for UE log analysis, when oai-nr-ue container is used
|
||||
elif 'oai-nr-ue' in services or 'lte_ue0' in services:
|
||||
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)
|
||||
if (logStatus < 0):
|
||||
fullStatus = False
|
||||
@@ -1125,11 +1129,12 @@ class Containerize():
|
||||
HTML.CreateHtmlTestRow(RAN.runtime_stats, 'OK', CONST.ALL_PROCESSES_OK)
|
||||
# all the xNB run logs shall be on the server 0 for logCollecting
|
||||
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:
|
||||
logging.info('\u001B[1m Undeploying OAI Object Pass\u001B[0m')
|
||||
else:
|
||||
logging.error('\u001B[1m Undeploying OAI Object Failed\u001B[0m')
|
||||
mySSH.close()
|
||||
|
||||
def DeployGenObject(self, HTML, RAN, UE):
|
||||
self.exitStatus = 0
|
||||
|
||||
@@ -171,7 +171,6 @@ MACRLCs = (
|
||||
remote_n_portd = 2153;
|
||||
pusch_TargetSNRx10 = 200;
|
||||
pucch_TargetSNRx10 = 200;
|
||||
ulsch_max_frame_inactivity = 1;
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
@@ -178,7 +178,6 @@ MACRLCs = (
|
||||
remote_n_portd = 2153;
|
||||
pusch_TargetSNRx10 = 200;
|
||||
pucch_TargetSNRx10 = 200;
|
||||
ulsch_max_frame_inactivity = 1;
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
@@ -200,7 +200,6 @@ MACRLCs = (
|
||||
tr_n_preference = "local_RRC";
|
||||
pusch_TargetSNRx10 = 200;
|
||||
pucch_TargetSNRx10 = 200;
|
||||
ulsch_max_frame_inactivity = 0;
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
@@ -202,7 +202,6 @@ MACRLCs = (
|
||||
num_cc = 1;
|
||||
tr_s_preference = "local_L1";
|
||||
tr_n_preference = "local_RRC";
|
||||
ulsch_max_frame_inactivity = 0;
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
@@ -1,41 +1,42 @@
|
||||
Active_gNBs = ( "gNB-Eurecom-5GNRBox");
|
||||
Active_gNBs = ( "gNB-OAI");
|
||||
# Asn1_verbosity, choice in: none, info, annoying
|
||||
Asn1_verbosity = "none";
|
||||
|
||||
sa = 1;
|
||||
|
||||
gNBs =
|
||||
(
|
||||
{
|
||||
////////// Identification parameters:
|
||||
gNB_ID = 0xe00;
|
||||
|
||||
cell_type = "CELL_MACRO_GNB";
|
||||
|
||||
gNB_name = "gNB-Eurecom-5GNRBox";
|
||||
gNB_name = "gNB-OAI";
|
||||
|
||||
// Tracking area code, 0x0000 and 0xfffe are reserved values
|
||||
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"
|
||||
|
||||
////////// Physical parameters:
|
||||
|
||||
sib1_tda = 15;
|
||||
min_rxtxtime = 6;
|
||||
|
||||
servingCellConfigCommon = (
|
||||
{
|
||||
#spCellConfigCommon
|
||||
|
||||
physCellId = 0;
|
||||
physCellId = 10;
|
||||
|
||||
# downlinkConfigCommon
|
||||
#frequencyInfoDL
|
||||
# this is pointA + 23 PRBs@120kHz SCS (same as initial BWP)
|
||||
absoluteFrequencySSB = 2071241;
|
||||
# this is pointA + 16 PRBs@120kHz SCS (same as initial BWP)
|
||||
absoluteFrequencySSB = 2071387;
|
||||
dl_frequencyBand = 261;
|
||||
# this is 27.900 GHz
|
||||
dl_absoluteFrequencyPointA = 2070833;
|
||||
dl_absoluteFrequencyPointA = 2071001;
|
||||
#scs-SpecificCarrierList
|
||||
dl_offstToCarrier = 0;
|
||||
# subcarrierSpacing
|
||||
@@ -50,7 +51,7 @@ gNBs =
|
||||
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
|
||||
initialDLBWPsubcarrierSpacing = 3;
|
||||
#pdcch-ConfigCommon
|
||||
initialDLBWPcontrolResourceSetZero = 12;
|
||||
initialDLBWPcontrolResourceSetZero = 1;
|
||||
initialDLBWPsearchSpaceZero = 0;
|
||||
|
||||
#uplinkConfigCommon
|
||||
@@ -85,12 +86,12 @@ gNBs =
|
||||
powerRampingStep = 1;
|
||||
#ra_ReponseWindow
|
||||
#1,2,4,8,10,20,40,80
|
||||
ra_ResponseWindow = 7;
|
||||
ra_ResponseWindow = 5;
|
||||
#ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
|
||||
#0=oneeighth,1=onefourth,2=half,3=one,4=two,5=four,6=eight,7=sixteen
|
||||
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 4;
|
||||
#1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
|
||||
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 3;
|
||||
#oneHalf (0..15) 4,8,12,16,...60,64
|
||||
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 7;
|
||||
ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 15;
|
||||
#ra_ContentionResolutionTimer
|
||||
#(0..7) 8,16,24,32,40,48,56,64
|
||||
ra_ContentionResolutionTimer = 7;
|
||||
@@ -101,8 +102,7 @@ gNBs =
|
||||
prach_RootSequenceIndex = 1;
|
||||
# SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex
|
||||
#
|
||||
msg1_SubcarrierSpacing = 3,
|
||||
|
||||
msg1_SubcarrierSpacing = 3;
|
||||
# restrictedSetConfig
|
||||
# 0=unrestricted, 1=restricted type A, 2=restricted type B
|
||||
restrictedSetConfig = 0,
|
||||
@@ -119,7 +119,7 @@ gNBs =
|
||||
# ssb_PositionsInBurs_BitmapPR
|
||||
# 1=short, 2=medium, 3=long
|
||||
ssb_PositionsInBurst_PR = 3;
|
||||
ssb_PositionsInBurst_Bitmap = 0x0001000100010001L;
|
||||
ssb_PositionsInBurst_Bitmap = 1;
|
||||
|
||||
# ssb_periodicityServingCell
|
||||
# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1
|
||||
@@ -152,7 +152,6 @@ gNBs =
|
||||
|
||||
);
|
||||
|
||||
|
||||
# ------- SCTP definitions
|
||||
SCTP :
|
||||
{
|
||||
@@ -162,91 +161,58 @@ gNBs =
|
||||
};
|
||||
|
||||
|
||||
////////// MME parameters:
|
||||
mme_ip_address = ( { ipv4 = "192.168.18.99";
|
||||
////////// AMF parameters:
|
||||
amf_ip_address = ( { ipv4 = "192.168.71.132";
|
||||
ipv6 = "192:168:30::17";
|
||||
active = "yes";
|
||||
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 :
|
||||
{
|
||||
|
||||
GNB_INTERFACE_NAME_FOR_S1_MME = "eth0";
|
||||
GNB_IPV4_ADDRESS_FOR_S1_MME = "192.168.18.198/24";
|
||||
GNB_INTERFACE_NAME_FOR_S1U = "eth0";
|
||||
GNB_IPV4_ADDRESS_FOR_S1U = "192.168.18.198/24";
|
||||
GNB_INTERFACE_NAME_FOR_NG_AMF = "eth0";
|
||||
GNB_IPV4_ADDRESS_FOR_NG_AMF = "192.168.71.140/24";
|
||||
GNB_INTERFACE_NAME_FOR_NGU = "eth0";
|
||||
GNB_IPV4_ADDRESS_FOR_NGU = "192.168.71.140/24";
|
||||
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 = (
|
||||
{
|
||||
num_cc = 1;
|
||||
tr_s_preference = "local_L1";
|
||||
tr_n_preference = "local_RRC";
|
||||
pusch_TargetSNRx10 = 200;
|
||||
pucch_TargetSNRx10 = 200;
|
||||
}
|
||||
);
|
||||
MACRLCs = ({
|
||||
num_cc = 1;
|
||||
tr_s_preference = "local_L1";
|
||||
tr_n_preference = "local_RRC";
|
||||
pusch_TargetSNRx10 = 200;
|
||||
pucch_TargetSNRx10 = 200;
|
||||
});
|
||||
|
||||
L1s = (
|
||||
{
|
||||
num_cc = 1;
|
||||
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 = (
|
||||
{
|
||||
local_rf = "yes"
|
||||
nb_tx = 1;
|
||||
nb_rx = 1;
|
||||
att_tx = 0;
|
||||
att_rx = 0;
|
||||
bands = [7];
|
||||
sl_ahead = 12;
|
||||
max_pdschReferenceSignalPower = -27;
|
||||
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";
|
||||
}
|
||||
);
|
||||
RUs = ({
|
||||
local_rf = "yes"
|
||||
nb_tx = 1;
|
||||
nb_rx = 1;
|
||||
att_tx = 0;
|
||||
att_rx = 0;
|
||||
sl_ahead = 12;
|
||||
bands = [261];
|
||||
max_pdschReferenceSignalPower = -27;
|
||||
eNB_instances = [0];
|
||||
});
|
||||
|
||||
rfsimulator: {
|
||||
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 = {
|
||||
# preferred ciphering algorithms
|
||||
# the first one of the list that an UE supports in chosen
|
||||
@@ -264,14 +230,6 @@ security = {
|
||||
drb_integrity = "no";
|
||||
};
|
||||
|
||||
log_config :
|
||||
{
|
||||
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";
|
||||
};
|
||||
|
||||
log_config: {
|
||||
global_log_level ="info";
|
||||
};
|
||||
@@ -187,7 +187,6 @@ MACRLCs = (
|
||||
tr_n_preference = "local_RRC";
|
||||
pusch_TargetSNRx10 = 150;
|
||||
pucch_TargetSNRx10 = 200;
|
||||
ulsch_max_frame_inactivity = 0;
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
@@ -197,8 +197,6 @@ MACRLCs = (
|
||||
tr_n_preference = "local_RRC";
|
||||
pusch_TargetSNRx10 = 180;
|
||||
pucch_TargetSNRx10 = 200;
|
||||
ulsch_max_frame_inactivity = 1;
|
||||
ul_max_mcs = 16;
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
@@ -188,7 +188,6 @@ MACRLCs = (
|
||||
tr_n_preference = "local_RRC";
|
||||
#pusch_TargetSNRx10 = 150;
|
||||
#pucch_TargetSNRx10 = 200;
|
||||
ulsch_max_frame_inactivity = 0;
|
||||
dl_max_mcs = 16; # there are retransmissions if more
|
||||
}
|
||||
);
|
||||
|
||||
@@ -190,7 +190,6 @@ MACRLCs = (
|
||||
tr_n_preference = "local_RRC";
|
||||
pusch_TargetSNRx10 = 220;
|
||||
pucch_TargetSNRx10 = 200;
|
||||
ulsch_max_frame_inactivity = 0;
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
@@ -184,7 +184,6 @@ MACRLCs = (
|
||||
pusch_TargetSNRx10 = 200;
|
||||
pucch_TargetSNRx10 = 200;
|
||||
ul_prbblack_SNR_threshold = 10;
|
||||
ulsch_max_frame_inactivity = 10;
|
||||
ul_max_mcs = 9;
|
||||
}
|
||||
);
|
||||
|
||||
@@ -203,7 +203,6 @@ MACRLCs = (
|
||||
tr_n_preference = "local_RRC";
|
||||
pusch_TargetSNRx10 = 220;
|
||||
pucch_TargetSNRx10 = 200;
|
||||
ulsch_max_frame_inactivity = 0;
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
@@ -204,7 +204,6 @@ MACRLCs = (
|
||||
tr_n_preference = "local_RRC";
|
||||
# pusch_TargetSNRx10 = 200;
|
||||
# pucch_TargetSNRx10 = 150;
|
||||
ulsch_max_frame_inactivity = 0;
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
@@ -186,7 +186,6 @@ MACRLCs = (
|
||||
tr_n_preference = "local_RRC";
|
||||
pusch_TargetSNRx10 = 150;
|
||||
pucch_TargetSNRx10 = 200;
|
||||
ulsch_max_frame_inactivity = 1;
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
@@ -192,8 +192,6 @@ MACRLCs = (
|
||||
tr_n_preference = "local_RRC";
|
||||
pusch_TargetSNRx10 = 200;
|
||||
pucch_TargetSNRx10 = 200;
|
||||
ulsch_max_frame_inactivity = 10;
|
||||
ul_max_mcs = 28;
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
@@ -184,7 +184,6 @@ MACRLCs = (
|
||||
pusch_TargetSNRx10 = 200;
|
||||
pucch_TargetSNRx10 = 200;
|
||||
ul_prbblack_SNR_threshold = 10;
|
||||
ulsch_max_frame_inactivity = 0;
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
@@ -208,7 +208,6 @@ MACRLCs = (
|
||||
tr_n_preference = "local_RRC";
|
||||
pusch_TargetSNRx10 = 200;
|
||||
pucch_TargetSNRx10 = 200;
|
||||
ulsch_max_frame_inactivity = 1;
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
@@ -199,7 +199,6 @@ MACRLCs = (
|
||||
tr_n_preference = "local_RRC";
|
||||
pusch_TargetSNRx10 = 200;
|
||||
pucch_TargetSNRx10 = 200;
|
||||
ulsch_max_frame_inactivity = 0;
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
@@ -186,7 +186,6 @@ MACRLCs = (
|
||||
pusch_TargetSNRx10 = 200;
|
||||
pucch_TargetSNRx10 = 200;
|
||||
ul_prbblack_SNR_threshold = 10;
|
||||
ulsch_max_frame_inactivity = 0;
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
@@ -12,8 +12,8 @@ Ref :
|
||||
feptx_ofdm : 65.0
|
||||
feptx_total : 177.0
|
||||
L1 Tx processing : 700.0
|
||||
DLSCH encoding : 179.0
|
||||
L1 Rx processing : 526.0
|
||||
DLSCH encoding : 226.0
|
||||
L1 Rx processing : 640.0
|
||||
PUSCH inner-receiver : 400.0
|
||||
Schedule Response : 3.0
|
||||
DL & UL scheduling timing : 15.0
|
||||
|
||||
@@ -11,10 +11,10 @@ Ref :
|
||||
feptx_prec : 15.0
|
||||
feptx_ofdm : 35.0
|
||||
feptx_total : 57.0
|
||||
L1 Tx processing : 210.0
|
||||
DLSCH encoding : 137.0
|
||||
L1 Rx processing : 345.0
|
||||
PUSCH inner-receiver : 210.0
|
||||
L1 Tx processing : 260.0
|
||||
DLSCH encoding : 160.0
|
||||
L1 Rx processing : 420.0
|
||||
PUSCH inner-receiver : 170.0
|
||||
Schedule Response : 3.0
|
||||
DL & UL scheduling timing : 8.0
|
||||
UL Indication : 3.0
|
||||
|
||||
@@ -11,9 +11,9 @@ Ref :
|
||||
feptx_prec : 13.0
|
||||
feptx_ofdm : 33.0
|
||||
feptx_total : 55.0
|
||||
L1 Tx processing : 170.0
|
||||
DLSCH encoding : 118.0
|
||||
L1 Rx processing : 305.0
|
||||
L1 Tx processing : 220.0
|
||||
DLSCH encoding : 130.0
|
||||
L1 Rx processing : 387.0
|
||||
PUSCH inner-receiver : 150.0
|
||||
Schedule Response : 3.0
|
||||
DL & UL scheduling timing : 6.0
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
000021
|
||||
000022
|
||||
000023
|
||||
000024
|
||||
020021
|
||||
100021
|
||||
</TestCaseRequestedList>
|
||||
@@ -66,6 +67,12 @@
|
||||
<nb_healthy>14</nb_healthy>
|
||||
</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">
|
||||
<class>Ping</class>
|
||||
<desc>Ping ext-dn from all NR-UEs</desc>
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
100021
|
||||
000021
|
||||
000022
|
||||
000023
|
||||
020021
|
||||
030021
|
||||
030022
|
||||
@@ -59,6 +60,12 @@
|
||||
<nb_healthy>8</nb_healthy>
|
||||
</testCase>
|
||||
|
||||
<testCase id="000023">
|
||||
<class>Attach_UE</class>
|
||||
<desc>Attach OAI UE (Wait for IP)</desc>
|
||||
<id>rfsim5g_ue</id>
|
||||
</testCase>
|
||||
|
||||
<testCase id="020021">
|
||||
<class>Ping</class>
|
||||
<desc>Ping ext-dn from all NR-UEs</desc>
|
||||
|
||||
@@ -28,7 +28,6 @@
|
||||
<TestCaseRequestedList>
|
||||
111111
|
||||
100011
|
||||
000010
|
||||
000011
|
||||
000012
|
||||
000013
|
||||
@@ -47,36 +46,26 @@
|
||||
<images_to_pull>oai-gnb-asan oai-nr-ue-asan</images_to_pull>
|
||||
</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">
|
||||
<class>DeployGenObject</class>
|
||||
<desc>Deploy OAI 5G CoreNetwork</desc>
|
||||
<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>
|
||||
</testCase>
|
||||
|
||||
<testCase id="000012">
|
||||
<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>
|
||||
<services>oai-gnb</services>
|
||||
<nb_healthy>6</nb_healthy>
|
||||
<services>oai-gnb oai-nr-ue</services>
|
||||
<nb_healthy>7</nb_healthy>
|
||||
</testCase>
|
||||
|
||||
<testCase id="000013">
|
||||
<class>DeployGenObject</class>
|
||||
<desc>Deploy OAI 5G NR-UE RF sim SA</desc>
|
||||
<yaml_path>yaml_files/5g_fdd_rfsimulator</yaml_path>
|
||||
<services>oai-nr-ue</services>
|
||||
<nb_healthy>7</nb_healthy>
|
||||
<class>Attach_UE</class>
|
||||
<desc>Attach OAI UE (Wait for IP)</desc>
|
||||
<id>rfsim5g_ue</id>
|
||||
</testCase>
|
||||
|
||||
<testCase id="020011">
|
||||
|
||||
@@ -28,7 +28,6 @@
|
||||
<TestCaseRequestedList>
|
||||
111111
|
||||
100001
|
||||
000000
|
||||
000001
|
||||
000002
|
||||
000003
|
||||
@@ -47,36 +46,26 @@
|
||||
<images_to_pull>oai-gnb-asan oai-nr-ue-asan</images_to_pull>
|
||||
</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">
|
||||
<class>DeployGenObject</class>
|
||||
<desc>Deploy OAI 5G CoreNetwork</desc>
|
||||
<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>
|
||||
</testCase>
|
||||
|
||||
<testCase id="000002">
|
||||
<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>
|
||||
<services>oai-gnb</services>
|
||||
<nb_healthy>6</nb_healthy>
|
||||
<services>oai-gnb oai-nr-ue</services>
|
||||
<nb_healthy>7</nb_healthy>
|
||||
</testCase>
|
||||
|
||||
<testCase id="000003">
|
||||
<class>DeployGenObject</class>
|
||||
<desc>Deploy OAI 5G NR-UE RF sim SA</desc>
|
||||
<yaml_path>yaml_files/5g_rfsimulator_24prb</yaml_path>
|
||||
<services>oai-nr-ue</services>
|
||||
<nb_healthy>7</nb_healthy>
|
||||
<class>Attach_UE</class>
|
||||
<desc>Attach OAI UE (Wait for IP)</desc>
|
||||
<id>rfsim5g_ue</id>
|
||||
</testCase>
|
||||
|
||||
<testCase id="020001">
|
||||
|
||||
@@ -28,7 +28,6 @@
|
||||
<TestCaseRequestedList>
|
||||
111111
|
||||
100001
|
||||
000000
|
||||
000001
|
||||
000002
|
||||
000003
|
||||
@@ -47,36 +46,26 @@
|
||||
<images_to_pull>oai-gnb-asan oai-nr-ue-asan</images_to_pull>
|
||||
</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">
|
||||
<class>DeployGenObject</class>
|
||||
<desc>Deploy OAI 5G CoreNetwork</desc>
|
||||
<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>
|
||||
</testCase>
|
||||
|
||||
<testCase id="000002">
|
||||
<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>
|
||||
<services>oai-gnb</services>
|
||||
<nb_healthy>6</nb_healthy>
|
||||
<services>oai-gnb oai-nr-ue</services>
|
||||
<nb_healthy>7</nb_healthy>
|
||||
</testCase>
|
||||
|
||||
<testCase id="000003">
|
||||
<class>DeployGenObject</class>
|
||||
<desc>Deploy OAI 5G NR-UE RF sim SA</desc>
|
||||
<yaml_path>yaml_files/5g_rfsimulator_2x2</yaml_path>
|
||||
<services>oai-nr-ue</services>
|
||||
<nb_healthy>7</nb_healthy>
|
||||
<class>Attach_UE</class>
|
||||
<desc>Attach OAI UE (Wait for IP)</desc>
|
||||
<id>rfsim5g_ue</id>
|
||||
</testCase>
|
||||
|
||||
<testCase id="020001">
|
||||
|
||||
@@ -43,18 +43,16 @@
|
||||
|
||||
<testCase id="000020">
|
||||
<class>DeployGenObject</class>
|
||||
<desc>Deploy OAI-DU</desc>
|
||||
<desc>Deploy OAI-DU+nrUE</desc>
|
||||
<yaml_path>yaml_files/5g_rfsimulator_accelleran</yaml_path>
|
||||
<services>oai-du</services>
|
||||
<nb_healthy>1</nb_healthy>
|
||||
<services>oai-du oai-nr-ue</services>
|
||||
<nb_healthy>2</nb_healthy>
|
||||
</testCase>
|
||||
|
||||
<testCase id="000021">
|
||||
<class>DeployGenObject</class>
|
||||
<desc>Deploy nrUE</desc>
|
||||
<yaml_path>yaml_files/5g_rfsimulator_accelleran</yaml_path>
|
||||
<services>oai-nr-ue</services>
|
||||
<nb_healthy>2</nb_healthy>
|
||||
<class>Attach_UE</class>
|
||||
<desc>Attach OAI UE (Wait for IP)</desc>
|
||||
<id>rfsim5g_ue</id>
|
||||
</testCase>
|
||||
|
||||
<testCase id="020021">
|
||||
|
||||
@@ -50,7 +50,7 @@
|
||||
<class>Custom_Command</class>
|
||||
<desc>Clean-Up any residual volume</desc>
|
||||
<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 id="000010">
|
||||
|
||||
@@ -22,13 +22,12 @@
|
||||
-->
|
||||
<testCaseList>
|
||||
<htmlTabRef>rfsim-fr2-32prb-5gnr-tdd</htmlTabRef>
|
||||
<htmlTabName>Monolithic FR2 do-ra gNB</htmlTabName>
|
||||
<htmlTabName>Monolithic FR2 gNB</htmlTabName>
|
||||
<htmlTabIcon>wrench</htmlTabIcon>
|
||||
<repeatCount>1</repeatCount>
|
||||
<TestCaseRequestedList>
|
||||
111111
|
||||
100001
|
||||
004000
|
||||
000000
|
||||
000001
|
||||
020001
|
||||
@@ -44,42 +43,35 @@
|
||||
<images_to_pull>oai-gnb-asan oai-nr-ue-asan</images_to_pull>
|
||||
</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">
|
||||
<class>DeployGenObject</class>
|
||||
<desc>Deploy OAI gNB</desc>
|
||||
<yaml_path>yaml_files/5g_rfsimulator_fr2_32prb</yaml_path>
|
||||
<services>oai-gnb</services>
|
||||
<nb_healthy>1</nb_healthy>
|
||||
<services>mysql oai-amf oai-smf oai-upf oai-ext-dn</services>
|
||||
<nb_healthy>5</nb_healthy>
|
||||
</testCase>
|
||||
|
||||
<testCase id="000001">
|
||||
<class>DeployGenObject</class>
|
||||
<desc>Deploy OAI NR-UE</desc>
|
||||
<yaml_path>yaml_files/5g_rfsimulator_fr2_32prb</yaml_path>
|
||||
<services>oai-nr-ue</services>
|
||||
<nb_healthy>2</nb_healthy>
|
||||
<services>oai-gnb oai-nr-ue</services>
|
||||
<nb_healthy>7</nb_healthy>
|
||||
</testCase>
|
||||
|
||||
<testCase id="020001">
|
||||
<class>Ping</class>
|
||||
<desc>Ping gNB from NR-UE</desc>
|
||||
<desc>Ping ext-dn from NR-UE</desc>
|
||||
<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>
|
||||
</testCase>
|
||||
|
||||
<testCase id="020002">
|
||||
<class>Ping</class>
|
||||
<desc>Ping NR-UE from gNB</desc>
|
||||
<id>rfsim5g_gnb_nos1</id>
|
||||
<ping_args>-c20 -i0.2 10.0.1.2</ping_args>
|
||||
<desc>Ping NR-UE from ext-dn</desc>
|
||||
<id>rfsim5g_ext_dn</id>
|
||||
<ping_args>-c 20 12.1.1.2 -i0.2</ping_args>
|
||||
<ping_packetloss_threshold>0</ping_packetloss_threshold>
|
||||
</testCase>
|
||||
|
||||
@@ -87,8 +79,8 @@
|
||||
<class>UndeployGenObject</class>
|
||||
<desc>Undeploy all OAI 5G stack</desc>
|
||||
<yaml_path>yaml_files/5g_rfsimulator_fr2_32prb</yaml_path>
|
||||
<d_retx_th>0,0,0,0</d_retx_th>
|
||||
<u_retx_th>0,0,0,0</u_retx_th>
|
||||
<d_retx_th>10,0,0,0</d_retx_th>
|
||||
<u_retx_th>10,0,0,0</u_retx_th>
|
||||
</testCase>
|
||||
|
||||
</testCaseList>
|
||||
|
||||
@@ -26,7 +26,6 @@
|
||||
<htmlTabIcon>trash</htmlTabIcon>
|
||||
<TestCaseRequestedList>
|
||||
100002
|
||||
004000
|
||||
222222
|
||||
</TestCaseRequestedList>
|
||||
<TestCaseExclusionList></TestCaseExclusionList>
|
||||
@@ -37,13 +36,6 @@
|
||||
<yaml_path>yaml_files/5g_rfsimulator_fr2_32prb</yaml_path>
|
||||
</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">
|
||||
<class>Clean_Test_Server_Images</class>
|
||||
<desc>Clean Test Images on Test Server</desc>
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
<class>Custom_Command</class>
|
||||
<desc>Clean-Up any residual volume</desc>
|
||||
<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 id="000000">
|
||||
|
||||
@@ -28,7 +28,6 @@
|
||||
<TestCaseRequestedList>
|
||||
111111
|
||||
100001
|
||||
000000
|
||||
000001
|
||||
000002
|
||||
000003
|
||||
@@ -47,36 +46,26 @@
|
||||
<images_to_pull>oai-gnb-asan oai-nr-ue-asan</images_to_pull>
|
||||
</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">
|
||||
<class>DeployGenObject</class>
|
||||
<desc>Deploy OAI 5G CoreNetwork</desc>
|
||||
<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>
|
||||
</testCase>
|
||||
|
||||
<testCase id="000002">
|
||||
<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>
|
||||
<services>oai-gnb</services>
|
||||
<nb_healthy>6</nb_healthy>
|
||||
<services>oai-gnb oai-nr-ue</services>
|
||||
<nb_healthy>7</nb_healthy>
|
||||
</testCase>
|
||||
|
||||
<testCase id="000003">
|
||||
<class>DeployGenObject</class>
|
||||
<desc>Deploy OAI 5G NR-UE RF sim SA</desc>
|
||||
<yaml_path>yaml_files/5g_rfsimulator_u0_25prb</yaml_path>
|
||||
<services>oai-nr-ue</services>
|
||||
<nb_healthy>7</nb_healthy>
|
||||
<class>Attach_UE</class>
|
||||
<desc>Attach OAI UE (Wait for IP)</desc>
|
||||
<id>rfsim5g_ue</id>
|
||||
</testCase>
|
||||
|
||||
<testCase id="020001">
|
||||
|
||||
@@ -26,6 +26,8 @@
|
||||
<htmlTabIcon>tasks</htmlTabIcon>
|
||||
<repeatCount>1</repeatCount>
|
||||
<TestCaseRequestedList>
|
||||
010001
|
||||
010002
|
||||
030202
|
||||
030201
|
||||
222220
|
||||
@@ -33,6 +35,17 @@
|
||||
</TestCaseRequestedList>
|
||||
<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">
|
||||
<class>Undeploy_Object</class>
|
||||
<desc>Undeploy eNB</desc>
|
||||
|
||||
@@ -26,10 +26,23 @@
|
||||
<htmlTabIcon>tasks</htmlTabIcon>
|
||||
<repeatCount>1</repeatCount>
|
||||
<TestCaseRequestedList>
|
||||
010001
|
||||
010002
|
||||
030201
|
||||
</TestCaseRequestedList>
|
||||
<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">
|
||||
<class>Undeploy_Object</class>
|
||||
<desc>Undeploy gNB</desc>
|
||||
|
||||
@@ -37,6 +37,10 @@
|
||||
370001
|
||||
370000
|
||||
370002
|
||||
360001
|
||||
100002
|
||||
360002
|
||||
350000
|
||||
310011
|
||||
310002
|
||||
330201
|
||||
@@ -114,9 +118,9 @@
|
||||
|
||||
<testCase id="350000">
|
||||
<class>Ping</class>
|
||||
<desc>Ping: 20pings in 20sec</desc>
|
||||
<desc>Ping: 50pings in 10sec</desc>
|
||||
<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_rttavg_threshold>25</ping_rttavg_threshold>
|
||||
</testCase>
|
||||
@@ -152,6 +156,27 @@
|
||||
<iperf_profile>single-ue</iperf_profile>
|
||||
</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">
|
||||
<class>Undeploy_Object</class>
|
||||
<desc>Undeploy CU-DU</desc>
|
||||
|
||||
@@ -26,11 +26,24 @@
|
||||
<htmlTabIcon>tasks</htmlTabIcon>
|
||||
<repeatCount>1</repeatCount>
|
||||
<TestCaseRequestedList>
|
||||
010001
|
||||
010002
|
||||
330201
|
||||
222222
|
||||
</TestCaseRequestedList>
|
||||
<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">
|
||||
<class>Undeploy_Object</class>
|
||||
<desc>Undeploy CU-CP/CU-UP/DU</desc>
|
||||
|
||||
@@ -26,10 +26,23 @@
|
||||
<htmlTabIcon>tasks</htmlTabIcon>
|
||||
<repeatCount>1</repeatCount>
|
||||
<TestCaseRequestedList>
|
||||
010001
|
||||
010002
|
||||
230201
|
||||
</TestCaseRequestedList>
|
||||
<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">
|
||||
<class>Undeploy_Object</class>
|
||||
<desc>Undeploy CU-DU</desc>
|
||||
|
||||
@@ -26,10 +26,23 @@
|
||||
<htmlTabIcon>tasks</htmlTabIcon>
|
||||
<repeatCount>1</repeatCount>
|
||||
<TestCaseRequestedList>
|
||||
010001
|
||||
010002
|
||||
030201
|
||||
</TestCaseRequestedList>
|
||||
<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">
|
||||
<class>Undeploy_Object</class>
|
||||
<desc>Undeploy gNB</desc>
|
||||
|
||||
@@ -1,18 +1,99 @@
|
||||
version: '3.8'
|
||||
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:
|
||||
image: oaisoftwarealliance/oai-gnb:develop
|
||||
privileged: true
|
||||
container_name: rfsim5g-oai-gnb
|
||||
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
|
||||
networks:
|
||||
public_net:
|
||||
ipv4_address: 192.168.71.140
|
||||
volumes:
|
||||
- ../../conf_files/gnb.band261.32prb.rfsim.phytest-dora.conf:/opt/oai-gnb/etc/gnb.conf
|
||||
- rrc.config:/opt/oai-gnb/
|
||||
- ../../conf_files/gnb.sa.band261.u3.32prb.rfsim.conf:/opt/oai-gnb/etc/gnb.conf
|
||||
healthcheck:
|
||||
test: /bin/bash -c "pgrep nr-softmodem"
|
||||
interval: 10s
|
||||
@@ -24,11 +105,12 @@ services:
|
||||
privileged: true
|
||||
container_name: rfsim5g-oai-nr-ue
|
||||
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
|
||||
volumes:
|
||||
- ../../conf_files/nrue.uicc.conf:/opt/oai-nr-ue/etc/nr-ue.conf
|
||||
- rrc.config:/opt/oai-nr-ue/etc/rrc/
|
||||
depends_on:
|
||||
- oai-gnb
|
||||
networks:
|
||||
@@ -40,9 +122,6 @@ services:
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
|
||||
volumes:
|
||||
rrc.config:
|
||||
|
||||
networks:
|
||||
public_net:
|
||||
driver: bridge
|
||||
@@ -52,3 +131,11 @@ networks:
|
||||
- subnet: 192.168.71.128/26
|
||||
driver_opts:
|
||||
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:
|
||||
privileged: true
|
||||
network_mode: "host"
|
||||
container_name: oai-gnb
|
||||
ulimits:
|
||||
core: -1 # for core dumps
|
||||
environment:
|
||||
TZ: Europe/Paris
|
||||
USE_ADDITIONAL_OPTIONS: --sa --tune-offset 20000000 -A 45 --log_config.global_log_options level,nocolor,time
|
||||
|
||||
@@ -5,6 +5,8 @@ services:
|
||||
privileged: true
|
||||
network_mode: host
|
||||
container_name: oai-nr-ue
|
||||
ulimits:
|
||||
core: -1 # for core dumps
|
||||
#entrypoint: /bin/bash -c "sleep infinity"
|
||||
environment:
|
||||
TZ: Europe/Paris
|
||||
|
||||
@@ -5,6 +5,8 @@ services:
|
||||
image: oai-enb:latest
|
||||
privileged: true
|
||||
container_name: nsa-b200-enb
|
||||
ulimits:
|
||||
core: -1 # for core dumps
|
||||
environment:
|
||||
USE_B2XX: 'yes'
|
||||
USE_ADDITIONAL_OPTIONS: --log_config.global_log_options level,nocolor,time,line_num,function
|
||||
|
||||
@@ -5,6 +5,8 @@ services:
|
||||
image: oai-gnb:latest
|
||||
privileged: true
|
||||
container_name: nsa-b200-gnb
|
||||
ulimits:
|
||||
core: -1 # for core dumps
|
||||
environment:
|
||||
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
|
||||
|
||||
@@ -5,6 +5,8 @@ services:
|
||||
privileged: true
|
||||
network_mode: "host"
|
||||
container_name: oai-gnb-aw2s
|
||||
ulimits:
|
||||
core: -1 # for core dumps
|
||||
environment:
|
||||
TZ: Europe/Paris
|
||||
USE_ADDITIONAL_OPTIONS: --sa
|
||||
|
||||
@@ -5,6 +5,8 @@ services:
|
||||
image: oai-gnb:latest
|
||||
privileged: true
|
||||
container_name: sa-b200-gnb
|
||||
ulimits:
|
||||
core: -1 # for core dumps
|
||||
environment:
|
||||
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
|
||||
|
||||
@@ -5,8 +5,10 @@ services:
|
||||
image: oai-gnb:latest
|
||||
privileged: true
|
||||
container_name: sa-cucp-gnb
|
||||
ulimits:
|
||||
core: -1 # for core dumps
|
||||
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:
|
||||
- ../../conf_files/gnb-cucp.sa.f1.quectel.conf:/opt/oai-gnb/etc/gnb.conf
|
||||
networks:
|
||||
@@ -23,6 +25,8 @@ services:
|
||||
image: oai-nr-cuup:latest
|
||||
privileged: true
|
||||
container_name: sa-cuup-gnb
|
||||
ulimits:
|
||||
core: -1 # for core dumps
|
||||
environment:
|
||||
USE_ADDITIONAL_OPTIONS: --sa --log_config.global_log_options level,nocolor,time,line_num,function
|
||||
volumes:
|
||||
@@ -41,9 +45,17 @@ services:
|
||||
image: oai-gnb:latest
|
||||
privileged: true
|
||||
container_name: sa-du-b200-gnb
|
||||
ulimits:
|
||||
core: -1 # for core dumps
|
||||
environment:
|
||||
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:
|
||||
- ../../conf_files/gnb-du.sa.band78.106prb.usrpb200.conf:/opt/oai-gnb/etc/gnb.conf
|
||||
- /dev:/dev
|
||||
|
||||
@@ -5,6 +5,8 @@ services:
|
||||
image: oai-gnb:latest
|
||||
privileged: true
|
||||
container_name: sa-cu-gnb
|
||||
ulimits:
|
||||
core: -1 # for core dumps
|
||||
environment:
|
||||
USE_ADDITIONAL_OPTIONS: --sa --telnetsrv --telnetsrv.shrmod ci --log_config.global_log_options level,nocolor,time,line_num,function
|
||||
volumes:
|
||||
@@ -24,9 +26,11 @@ services:
|
||||
image: oai-gnb:latest
|
||||
privileged: true
|
||||
container_name: sa-du-b200-gnb
|
||||
ulimits:
|
||||
core: -1 # for core dumps
|
||||
environment:
|
||||
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:
|
||||
- ../../conf_files/gnb-du.sa.band1.52prb.usrpb210.conf:/opt/oai-gnb/etc/gnb.conf
|
||||
- /dev:/dev
|
||||
|
||||
@@ -5,6 +5,8 @@ services:
|
||||
image: oai-gnb:latest
|
||||
privileged: true
|
||||
container_name: sa-b200-gnb
|
||||
ulimits:
|
||||
core: -1 # for core dumps
|
||||
environment:
|
||||
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
|
||||
|
||||
@@ -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 clone https://github.com/mouse07410/asn1c /tmp/asn1c
|
||||
cd /tmp/asn1c
|
||||
# 2024-02-06: problem compatibility between E2-agent and 4cfcd4f191c3fa41f6ac1b15cb2ad3acc1520af5 from asn1c
|
||||
# Reverting to previous commit that works
|
||||
# TODO : revert to vlm_master once FlexRic and E2-agent are fixed
|
||||
git checkout -f a6bdcd22658d6b7c3ed218d8c1375907ac532b64
|
||||
git checkout vlm_master
|
||||
# Showing which version is used
|
||||
git log -n1
|
||||
autoreconf -iv
|
||||
|
||||
@@ -354,6 +354,7 @@ configmodule_interface_t *load_configmodule(int argc,
|
||||
|
||||
if (i == 0) {
|
||||
printf("[CONFIG] config module %s loaded\n",cfgmode);
|
||||
// Continue/Read from this
|
||||
int idx = config_paramidx_fromname(Config_Params, sizeofArray(Config_Params), CONFIGP_DEBUGFLAGS);
|
||||
Config_Params[idx].uptr = &(cfgptr->rtflags);
|
||||
idx = config_paramidx_fromname(Config_Params, sizeofArray(Config_Params), CONFIGP_TMPDIR);
|
||||
|
||||
@@ -126,6 +126,12 @@ int config_get(configmodule_interface_t *cfgif, paramdef_t *params, int numparam
|
||||
|
||||
if (cfgif != NULL) {
|
||||
ret = cfgif->get(cfgif, params, numparams, prefix);
|
||||
/* testing
|
||||
printf("Num params: %d\n", numparams);
|
||||
for (int i = 0; i < numparams; i++){
|
||||
printf("%d, %s\n", i, params[i].optname);
|
||||
}
|
||||
end testing */
|
||||
|
||||
if (ret >= 0) {
|
||||
config_process_cmdline(cfgif, params, numparams, prefix);
|
||||
|
||||
@@ -44,17 +44,20 @@ typedef enum {
|
||||
ngran_gNB_DU = 7,
|
||||
ngran_eNB_MBMS_STA = 8,
|
||||
ngran_gNB_CUCP = 9,
|
||||
ngran_gNB_CUUP = 10
|
||||
ngran_gNB_CUUP = 10,
|
||||
ngran_gNB_IAB_donor_DU = 11,
|
||||
ngran_gNB_IAB_node_DU = 12,
|
||||
} ngran_node_t;
|
||||
|
||||
typedef enum { CPtype = 0, UPtype } E1_t;
|
||||
|
||||
#define NODE_IS_MONOLITHIC(nOdE_TyPe) ((nOdE_TyPe) == ngran_eNB || (nOdE_TyPe) == ngran_ng_eNB || (nOdE_TyPe) == ngran_gNB)
|
||||
#define NODE_IS_CU(nOdE_TyPe) ((nOdE_TyPe) == ngran_eNB_CU || (nOdE_TyPe) == ngran_ng_eNB_CU || (nOdE_TyPe) == ngran_gNB_CU || (nOdE_TyPe) == ngran_gNB_CUCP || (nOdE_TyPe) == ngran_gNB_CUUP)
|
||||
#define NODE_IS_DU(nOdE_TyPe) ((nOdE_TyPe) == ngran_eNB_DU || (nOdE_TyPe) == ngran_gNB_DU)
|
||||
#define NODE_IS_CU(nOdE_TyPe) ((nOdE_TyPe) == ngran_eNB_CU || (nOdE_TyPe) == ngran_ng_eNB_CU || (nOdE_TyPe) == ngran_gNB_CU || (nOdE_TyPe) == ngran_gNB_CUCP || (nOdE_TyPe) == ngran_gNB_CUUP)
|
||||
#define NODE_IS_DU(nOdE_TyPe) ((nOdE_TyPe) == ngran_eNB_DU || (nOdE_TyPe) == ngran_gNB_DU || (nOdE_TyPe) == ngran_gNB_IAB_donor_DU || (nOdE_TyPe) == ngran_gNB_IAB_node_DU)
|
||||
#define NODE_IS_IAB_DONOR_DU(nOdE_TyPe) ((nOdE_TyPe) == ngran_gNB_IAB_donor_DU)
|
||||
#define NODE_IS_IAB_NODE_DU(nOdE_TyPe) ((nOdE_TyPe) == ngran_gNB_IAB_node_DU)
|
||||
#define NODE_IS_MBMS(nOdE_TyPe) ((nOdE_TyPe) == ngran_eNB_MBMS_STA)
|
||||
#define GTPV1_U_PORT_NUMBER (2152)
|
||||
|
||||
typedef enum { non_dynamic, dynamic } fiveQI_type_t;
|
||||
#define maxSRBs 4
|
||||
#endif
|
||||
|
||||
@@ -41,6 +41,7 @@ struct PHY_VARS_gNB_s;
|
||||
struct PHY_VARS_eNB_NB_IoT_s;
|
||||
struct eNB_RRC_INST_s;
|
||||
struct gNB_RRC_INST_s;
|
||||
struct gNB_IAB_INFO_s;
|
||||
struct eNB_MAC_INST_s;
|
||||
struct eNB_MAC_INST_NB_IoT_s;
|
||||
struct gNB_MAC_INST_s;
|
||||
@@ -92,6 +93,8 @@ typedef struct {
|
||||
//struct eNB_RRC_INST_NB_IoT_s **nb_iot_rrc;
|
||||
/// NR RRC context variables
|
||||
struct gNB_RRC_INST_s **nrrrc;
|
||||
/// IAB context variables
|
||||
struct gNB_IAB_INFO_s **iab;
|
||||
/// MAC context variables
|
||||
struct eNB_MAC_INST_s **mac;
|
||||
/// NB_IoT MAC context variables
|
||||
|
||||
@@ -497,6 +497,8 @@ int logInit (void)
|
||||
register_log_component("GNB_APP","log",GNB_APP);
|
||||
register_log_component("NR_RRC","log",NR_RRC);
|
||||
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("NGAP","",NGAP);
|
||||
register_log_component("ITTI","log",ITTI);
|
||||
|
||||
@@ -161,16 +161,12 @@ extern "C" {
|
||||
{NULL,-1}\
|
||||
}
|
||||
|
||||
|
||||
|
||||
#define SET_LOG_DEBUG(B) g_log->debug_mask = (g_log->debug_mask | B)
|
||||
#define CLEAR_LOG_DEBUG(B) g_log->debug_mask = (g_log->debug_mask & (~B))
|
||||
|
||||
#define SET_LOG_DUMP(B) g_log->dump_mask = (g_log->dump_mask | B)
|
||||
#define CLEAR_LOG_DUMP(B) g_log->dump_mask = (g_log->dump_mask & (~B))
|
||||
|
||||
|
||||
|
||||
typedef enum {
|
||||
MIN_LOG_COMPONENTS = 0,
|
||||
PHY = MIN_LOG_COMPONENTS,
|
||||
@@ -219,6 +215,8 @@ typedef enum {
|
||||
GNB_APP,
|
||||
NR_RRC,
|
||||
NR_MAC,
|
||||
NR_MAC_DCI,
|
||||
NR_PHY_DCI,
|
||||
NR_PHY,
|
||||
LOADER,
|
||||
ASN1,
|
||||
@@ -227,13 +225,11 @@ typedef enum {
|
||||
ITTI,
|
||||
UTIL,
|
||||
MAX_LOG_PREDEF_COMPONENTS,
|
||||
}
|
||||
comp_name_t;
|
||||
} comp_name_t;
|
||||
|
||||
#define MAX_LOG_DYNALLOC_COMPONENTS 20
|
||||
#define MAX_LOG_COMPONENTS (MAX_LOG_PREDEF_COMPONENTS + MAX_LOG_DYNALLOC_COMPONENTS)
|
||||
|
||||
|
||||
typedef struct {
|
||||
char *name; /*!< \brief string name of item */
|
||||
int value; /*!< \brief integer value of mapping */
|
||||
@@ -252,7 +248,7 @@ typedef struct {
|
||||
log_vprint_func_t vprint;
|
||||
log_print_func_t print;
|
||||
/* SR: make the log buffer component relative */
|
||||
char log_buffer[MAX_LOG_TOTAL];
|
||||
// char log_buffer[MAX_LOG_TOTAL];
|
||||
} log_component_t;
|
||||
|
||||
|
||||
@@ -265,8 +261,6 @@ typedef struct {
|
||||
uint64_t dump_mask;
|
||||
} log_t;
|
||||
|
||||
|
||||
|
||||
#ifdef LOG_MAIN
|
||||
log_t *g_log;
|
||||
#else
|
||||
@@ -365,9 +359,6 @@ int32_t write_file_matlab(const char *fname, const char *vname, void *data, int
|
||||
" level: add log level indication in log messages\n"\
|
||||
" thread: add threads names in log messages\n"
|
||||
|
||||
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
|
||||
/* LOG global configuration parameters */
|
||||
/* optname help paramflags XXXptr defXXXval type numelt */
|
||||
@@ -396,41 +387,166 @@ int32_t write_file_matlab(const char *fname, const char *vname, void *data, int
|
||||
# if T_TRACER
|
||||
#include "T.h"
|
||||
/* per component, level dependent macros */
|
||||
# define LOG_E(c, x...) do { T(T_LEGACY_ ## c ## _ERROR, T_PRINTF(x)) ; if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_ERR ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_ERR, x) ;} } while (0)
|
||||
# define LOG_W(c, x...) do { T(T_LEGACY_ ## c ## _WARNING, T_PRINTF(x)); if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_WARNING ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_WARNING, x) ;} } while (0)
|
||||
# define LOG_A(c, x...) do { T(T_LEGACY_ ## c ## _INFO, T_PRINTF(x)) ; if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_ANALYSIS) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_ANALYSIS, x);} } while (0)
|
||||
# define LOG_I(c, x...) do { T(T_LEGACY_ ## c ## _INFO, T_PRINTF(x)) ; if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_INFO ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_INFO, x) ;} } while (0)
|
||||
# define LOG_D(c, x...) do { T(T_LEGACY_ ## c ## _DEBUG, T_PRINTF(x)) ; if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_DEBUG ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_DEBUG, x) ;} } while (0)
|
||||
# define LOG_T(c, x...) do { T(T_LEGACY_ ## c ## _TRACE, T_PRINTF(x)) ; if (T_stdout) { if( g_log->log_component[c].level >= OAILOG_TRACE ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_TRACE, x) ;} } while (0)
|
||||
# define VLOG(c,l, f, args) do { if (T_stdout) { if( g_log->log_component[c].level >= l ) vlogRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, l, f, args) ;} } while (0)
|
||||
#define LOG_E(c, x...) \
|
||||
do { \
|
||||
T(T_LEGACY_##c##_ERROR, T_PRINTF(x)); \
|
||||
if (T_stdout) { \
|
||||
if (g_log->log_component[c].level >= OAILOG_ERR) \
|
||||
logRecord_mt(__FILE__, __FUNCTION__, __LINE__, c, OAILOG_ERR, x); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#define LOG_W(c, x...) \
|
||||
do { \
|
||||
T(T_LEGACY_##c##_WARNING, T_PRINTF(x)); \
|
||||
if (T_stdout) { \
|
||||
if (g_log->log_component[c].level >= OAILOG_WARNING) \
|
||||
logRecord_mt(__FILE__, __FUNCTION__, __LINE__, c, OAILOG_WARNING, x); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#define LOG_A(c, x...) \
|
||||
do { \
|
||||
T(T_LEGACY_##c##_INFO, T_PRINTF(x)); \
|
||||
if (T_stdout) { \
|
||||
if (g_log->log_component[c].level >= OAILOG_ANALYSIS) \
|
||||
logRecord_mt(__FILE__, __FUNCTION__, __LINE__, c, OAILOG_ANALYSIS, x); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#define LOG_I(c, x...) \
|
||||
do { \
|
||||
T(T_LEGACY_##c##_INFO, T_PRINTF(x)); \
|
||||
if (T_stdout) { \
|
||||
if (g_log->log_component[c].level >= OAILOG_INFO) \
|
||||
logRecord_mt(__FILE__, __FUNCTION__, __LINE__, c, OAILOG_INFO, x); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#define LOG_D(c, x...) \
|
||||
do { \
|
||||
T(T_LEGACY_##c##_DEBUG, T_PRINTF(x)); \
|
||||
if (T_stdout) { \
|
||||
if (g_log->log_component[c].level >= OAILOG_DEBUG) \
|
||||
logRecord_mt(__FILE__, __FUNCTION__, __LINE__, c, OAILOG_DEBUG, x); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#define LOG_DDUMP(c, b, s, f, x...) \
|
||||
do { \
|
||||
T(T_LEGACY_##c##_DEBUG, T_PRINTF(x)); \
|
||||
if (T_stdout) { \
|
||||
if (g_log->log_component[c].level >= OAILOG_DEBUG) \
|
||||
log_dump(c, b, s, f, x); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#define LOG_T(c, x...) \
|
||||
do { \
|
||||
T(T_LEGACY_##c##_TRACE, T_PRINTF(x)); \
|
||||
if (T_stdout) { \
|
||||
if (g_log->log_component[c].level >= OAILOG_TRACE) \
|
||||
logRecord_mt(__FILE__, __FUNCTION__, __LINE__, c, OAILOG_TRACE, x); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#define VLOG(c, l, f, args) \
|
||||
do { \
|
||||
if (T_stdout) { \
|
||||
if (g_log->log_component[c].level >= l) \
|
||||
vlogRecord_mt(__FILE__, __FUNCTION__, __LINE__, c, l, f, args); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
/* macro used to dump a buffer or a message as in openair2/RRC/LTE/RRC_eNB.c, replaces LOG_F macro */
|
||||
# define LOG_DUMPMSG(c, f, b, s, x...) do { if(g_log->dump_mask & f) log_dump(c, b, s, LOG_DUMP_CHAR, x) ;} while (0) /* */
|
||||
#define LOG_DUMPMSG(c, f, b, s, x...) \
|
||||
do { \
|
||||
if (g_log->dump_mask & f) \
|
||||
log_dump(c, b, s, LOG_DUMP_CHAR, x); \
|
||||
} while (0)
|
||||
|
||||
/* bitmask dependent macros, to isolate debugging code */
|
||||
# define LOG_DEBUGFLAG(D) (g_log->debug_mask & D)
|
||||
#define LOG_DEBUGFLAG(D) (g_log->debug_mask & D)
|
||||
|
||||
/* bitmask dependent macros, to generate debug file such as matlab file or message dump */
|
||||
# define LOG_DUMPFLAG(D) (g_log->dump_mask & D)
|
||||
# define LOG_M(file, vector, data, len, dec, format) do { write_file_matlab(file, vector, data, len, dec, format, 0);} while(0)/* */
|
||||
#define LOG_DUMPFLAG(D) (g_log->dump_mask & D)
|
||||
|
||||
#define LOG_M(file, vector, data, len, dec, format) \
|
||||
do { \
|
||||
write_file_matlab(file, vector, data, len, dec, format, 0); \
|
||||
} while (0)
|
||||
|
||||
/* define variable only used in LOG macro's */
|
||||
# define LOG_VAR(A,B) A B
|
||||
# else /* T_TRACER */
|
||||
# define LOG_E(c, x...) do { if( g_log->log_component[c].level >= OAILOG_ERR ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_ERR, x) ;} while (0)
|
||||
# define LOG_W(c, x...) do { if( g_log->log_component[c].level >= OAILOG_WARNING ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_WARNING, x) ;} while (0)
|
||||
# define LOG_A(c, x...) do { if( g_log->log_component[c].level >= OAILOG_ANALYSIS) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_ANALYSIS, x);} while (0)
|
||||
# define LOG_I(c, x...) do { if( g_log->log_component[c].level >= OAILOG_INFO ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_INFO, x) ;} while (0)
|
||||
# define LOG_D(c, x...) do { if( g_log->log_component[c].level >= OAILOG_DEBUG ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_DEBUG, x) ;} while (0)
|
||||
# define LOG_T(c, x...) do { if( g_log->log_component[c].level >= OAILOG_TRACE ) logRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, OAILOG_TRACE, x) ;} while (0)
|
||||
# define VLOG(c,l, f, args) do { if( g_log->log_component[c].level >= l ) vlogRecord_mt(__FILE__, __FUNCTION__, __LINE__,c, l, f, args) ; } while (0)
|
||||
#define LOG_VAR(A, B) A B
|
||||
|
||||
# define nfapi_log(FILE, FNC, LN, COMP, LVL, FMT...)
|
||||
# define LOG_DEBUGFLAG(D) (g_log->dump_mask & D)
|
||||
# define LOG_DUMPFLAG(D) (g_log->debug_mask & D)
|
||||
# define LOG_DUMPMSG(c, f, b, s, x...) do { if(g_log->dump_mask & f) log_dump(c, b, s, LOG_DUMP_CHAR, x) ;} while (0) /* */
|
||||
#else /* no T_TRACER */
|
||||
|
||||
# define LOG_M(file, vector, data, len, dec, format) do { write_file_matlab(file, vector, data, len, dec, format, 0);} while(0)
|
||||
# define LOG_VAR(A,B) A B
|
||||
# define T_ACTIVE(a) (0)
|
||||
# endif /* T_TRACER */
|
||||
#define LOG_E(c, x...) \
|
||||
do { \
|
||||
if (g_log->log_component[c].level >= OAILOG_ERR) \
|
||||
logRecord_mt(__FILE__, __FUNCTION__, __LINE__, c, OAILOG_ERR, x); \
|
||||
} while (0)
|
||||
|
||||
#define LOG_W(c, x...) \
|
||||
do { \
|
||||
if (g_log->log_component[c].level >= OAILOG_WARNING) \
|
||||
logRecord_mt(__FILE__, __FUNCTION__, __LINE__, c, OAILOG_WARNING, x); \
|
||||
} while (0)
|
||||
|
||||
#define LOG_A(c, x...) \
|
||||
do { \
|
||||
if (g_log->log_component[c].level >= OAILOG_ANALYSIS) \
|
||||
logRecord_mt(__FILE__, __FUNCTION__, __LINE__, c, OAILOG_ANALYSIS, x); \
|
||||
} while (0)
|
||||
|
||||
#define LOG_I(c, x...) \
|
||||
do { \
|
||||
if (g_log->log_component[c].level >= OAILOG_INFO) \
|
||||
logRecord_mt(__FILE__, __FUNCTION__, __LINE__, c, OAILOG_INFO, x); \
|
||||
} while (0)
|
||||
|
||||
#define LOG_D(c, x...) \
|
||||
do { \
|
||||
if (g_log->log_component[c].level >= OAILOG_DEBUG) \
|
||||
logRecord_mt(__FILE__, __FUNCTION__, __LINE__, c, OAILOG_DEBUG, x); \
|
||||
} while (0)
|
||||
|
||||
#define LOG_DDUMP(c, b, s, f, x...) \
|
||||
do { \
|
||||
if (g_log->log_component[c].level >= OAILOG_DEBUG) \
|
||||
log_dump(c, b, s, f, x); \
|
||||
} while (0)
|
||||
|
||||
#define LOG_T(c, x...) \
|
||||
do { \
|
||||
if (g_log->log_component[c].level >= OAILOG_TRACE) \
|
||||
logRecord_mt(__FILE__, __FUNCTION__, __LINE__, c, OAILOG_TRACE, x); \
|
||||
} while (0)
|
||||
|
||||
#define VLOG(c, l, f, args) \
|
||||
do { \
|
||||
if (g_log->log_component[c].level >= l) \
|
||||
vlogRecord_mt(__FILE__, __FUNCTION__, __LINE__, c, l, f, args); \
|
||||
} while (0)
|
||||
|
||||
#define nfapi_log(FILE, FNC, LN, COMP, LVL, FMT...)
|
||||
#define LOG_DEBUGFLAG(D) (g_log->dump_mask & D)
|
||||
#define LOG_DUMPFLAG(D) (g_log->debug_mask & D)
|
||||
#define LOG_DUMPMSG(c, f, b, s, x...) \
|
||||
do { \
|
||||
if (g_log->dump_mask & f) \
|
||||
log_dump(c, b, s, LOG_DUMP_CHAR, x); \
|
||||
} while (0) /* */
|
||||
|
||||
#define LOG_M(file, vector, data, len, dec, format) \
|
||||
do { \
|
||||
write_file_matlab(file, vector, data, len, dec, format, 0); \
|
||||
} while (0)
|
||||
|
||||
#define LOG_VAR(A, B) A B
|
||||
#define T_ACTIVE(a) (0)
|
||||
|
||||
#endif /* T_TRACER */
|
||||
|
||||
/* avoid warnings for variables only used in LOG macro's but set outside debug section */
|
||||
#define GCC_NOTUSED __attribute__((unused))
|
||||
|
||||
@@ -361,6 +361,48 @@ ID = LEGACY_NR_MAC_TRACE
|
||||
GROUP = ALL:LEGACY_NR_MAC:LEGACY_GROUP_TRACE:LEGACY
|
||||
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
|
||||
DESC = PHY legacy logs - info level
|
||||
GROUP = ALL:LEGACY_PHY:LEGACY_GROUP_INFO:LEGACY
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
add_library(tracer_utils OBJECT configuration.c database.c event.c handler.c utils.c)
|
||||
target_link_libraries(tracer_utils PUBLIC m pthread)
|
||||
|
||||
add_library(tracer_events OBJECT event_selector.c)
|
||||
|
||||
add_executable(record record.c)
|
||||
target_link_libraries(record PRIVATE tracer_utils)
|
||||
|
||||
@@ -28,10 +26,19 @@ add_executable(multi multi.c)
|
||||
target_link_libraries(multi PRIVATE tracer_utils T)
|
||||
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_dependencies(T_tools
|
||||
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-uesoftmodem T_tools)
|
||||
add_dependencies(lte-softmodem T_tools)
|
||||
@@ -42,9 +49,7 @@ add_dependencies(lte-uesoftmodem T_tools)
|
||||
# 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)
|
||||
if(T_TRACER_GUI)
|
||||
add_executable(textlog textlog.c)
|
||||
target_link_libraries(textlog PRIVATE tracer_utils tracer_filter tracer_gui
|
||||
tracer_logger tracer_view tracer_events)
|
||||
add_library(tracer_events OBJECT event_selector.c)
|
||||
|
||||
find_library(png png REQUIRED)
|
||||
add_executable(enb enb.c)
|
||||
@@ -71,9 +76,6 @@ if(T_TRACER_GUI)
|
||||
tracer_logger tracer_view tracer_events)
|
||||
|
||||
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()
|
||||
|
||||
@@ -31,9 +31,8 @@ extract: extract.o database.o event.o utils.o configuration.o
|
||||
$(CC) $(CFLAGS) -o $@ $^ $(LIBS)
|
||||
|
||||
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 \
|
||||
filter/filter.a
|
||||
$(CC) $(CFLAGS) -o textlog $^ $(LIBS) $(XLIBS)
|
||||
view/view.a logger/logger.a filter/filter.a
|
||||
$(CC) $(CFLAGS) -o textlog $^ $(LIBS)
|
||||
|
||||
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 \
|
||||
|
||||
@@ -1,42 +1,24 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <pthread.h>
|
||||
#include <signal.h>
|
||||
#include "database.h"
|
||||
#include "event.h"
|
||||
#include "handler.h"
|
||||
#include "logger/logger.h"
|
||||
#include "view/view.h"
|
||||
#include "gui/gui.h"
|
||||
#include "utils.h"
|
||||
#include "event_selector.h"
|
||||
#include "configuration.h"
|
||||
|
||||
typedef struct {
|
||||
int socket;
|
||||
int *is_on;
|
||||
int nevents;
|
||||
pthread_mutex_t lock;
|
||||
} textlog_data;
|
||||
|
||||
void is_on_changed(void *_d)
|
||||
void activate_traces(int socket, int *is_on, int nevents)
|
||||
{
|
||||
textlog_data *d = _d;
|
||||
char t;
|
||||
|
||||
if (pthread_mutex_lock(&d->lock)) abort();
|
||||
|
||||
if (d->socket == -1) goto no_connection;
|
||||
|
||||
t = 1;
|
||||
if (socket_send(d->socket, &t, 1) == -1 ||
|
||||
socket_send(d->socket, &d->nevents, sizeof(int)) == -1 ||
|
||||
socket_send(d->socket, d->is_on, d->nevents * sizeof(int)) == -1)
|
||||
if (socket_send(socket, &t, 1) == -1 ||
|
||||
socket_send(socket, &nevents, sizeof(int)) == -1 ||
|
||||
socket_send(socket, is_on, nevents * sizeof(int)) == -1)
|
||||
abort();
|
||||
|
||||
no_connection:
|
||||
if (pthread_mutex_unlock(&d->lock)) abort();
|
||||
}
|
||||
|
||||
void usage(void)
|
||||
@@ -54,28 +36,18 @@ void usage(void)
|
||||
" -full also dump buffers' content\n"
|
||||
" -raw-time also prints 'raw time'\n"
|
||||
" -ip <host> connect to given IP address (default %s)\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",
|
||||
" -p <port> connect to given port (default %d)\n",
|
||||
DEFAULT_REMOTE_IP,
|
||||
DEFAULT_REMOTE_PORT
|
||||
);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
static void *gui_thread(void *_g)
|
||||
{
|
||||
gui *g = _g;
|
||||
gui_loop(g);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int main(int n, char **v)
|
||||
{
|
||||
extern int volatile gui_logd;
|
||||
char *database_filename = NULL;
|
||||
void *database;
|
||||
int socket;
|
||||
char *ip = DEFAULT_REMOTE_IP;
|
||||
int port = DEFAULT_REMOTE_PORT;
|
||||
char **on_off_name;
|
||||
@@ -86,11 +58,7 @@ int main(int n, char **v)
|
||||
int i;
|
||||
event_handler *h;
|
||||
logger *textlog;
|
||||
gui *g = NULL; /* initialization not necessary but gcc is not happy */
|
||||
int gui_mode = 0;
|
||||
view *out;
|
||||
int gui_active = 1;
|
||||
textlog_data textlog_data;
|
||||
int full = 0;
|
||||
int raw_time = 0;
|
||||
|
||||
@@ -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; }
|
||||
if (!strcmp(v[i], "-OFF"))
|
||||
{ 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], "-raw-time")) { raw_time = 1; continue; }
|
||||
usage();
|
||||
}
|
||||
|
||||
if (gui_active == 0) gui_mode = 0;
|
||||
|
||||
if (database_filename == NULL) {
|
||||
printf("ERROR: provide a database file (-d)\n");
|
||||
exit(1);
|
||||
@@ -140,29 +103,12 @@ int main(int n, char **v)
|
||||
|
||||
h = new_handler(database);
|
||||
|
||||
if (gui_active) {
|
||||
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();
|
||||
}
|
||||
out = new_view_stdout();
|
||||
|
||||
for (i = 0; i < number_of_events; i++) {
|
||||
char *name, *desc;
|
||||
database_get_generic_description(database, i, &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);
|
||||
if (full) textlog_dump_buffer(textlog, 1);
|
||||
if (raw_time) textlog_raw_time(textlog, 1);
|
||||
@@ -173,24 +119,21 @@ int main(int n, char **v)
|
||||
for (i = 0; i < on_off_n; i++)
|
||||
on_off(database, on_off_name[i], is_on, on_off_action[i]);
|
||||
|
||||
textlog_data.socket = -1;
|
||||
textlog_data.is_on = is_on;
|
||||
textlog_data.nevents = number_of_events;
|
||||
if (pthread_mutex_init(&textlog_data.lock, NULL)) abort();
|
||||
if (gui_active)
|
||||
setup_event_selector(g, database, is_on, is_on_changed, &textlog_data);
|
||||
|
||||
textlog_data.socket = connect_to(ip, port);
|
||||
socket = connect_to(ip, port);
|
||||
if (socket == -1) {
|
||||
printf("fatal: connection failed\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* 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 };
|
||||
|
||||
/* read messages */
|
||||
while (1) {
|
||||
event e;
|
||||
e = get_event(textlog_data.socket, &ebuf, database);
|
||||
e = get_event(socket, &ebuf, database);
|
||||
if (e.type == -1) break;
|
||||
handle_event(h, e);
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
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.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.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](../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\>.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_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)
|
||||
|
||||
@@ -26,7 +26,7 @@ Below are examples of telnet sessions:
|
||||
* [measur command](telnetmeasur.md)
|
||||
|
||||
# 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 |
|
||||
|:---:|:---:|:---:|:----|:----:|
|
||||
|
||||
@@ -75,11 +75,11 @@ sequenceDiagram
|
||||
Note over u: E1AP_CUUP_task (SCTP Handler)
|
||||
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
|
||||
|
||||
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
|
||||
|
||||
74
doc/E1AP/e1ap_procedures.md
Normal file
@@ -0,0 +1,74 @@
|
||||
<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
|
||||
```
|
||||
356
doc/IAB_docs/BAP_Info.md
Normal file
@@ -0,0 +1,356 @@
|
||||
<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">BAP Documentation</font></b>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
**Table of Contents**
|
||||
|
||||
[[_TOC_]]
|
||||
|
||||
# Glossary
|
||||
|
||||
| Acronym | Description |
|
||||
| ------- | ------------------------------ |
|
||||
| BAP | Backhaul Adaptation Protocol |
|
||||
| BH | Backhaul |
|
||||
| CU | Centralized Unit |
|
||||
| DU | Distributed Unit |
|
||||
| IAB | Integrated Access and Backhaul |
|
||||
| IE | Information Element |
|
||||
| MT | Mobile Termination |
|
||||
| RLC | Radio Link Control |
|
||||
| RRC | Radio Resource Control |
|
||||
|
||||
# 1. Scenario
|
||||
|
||||
This document aims to gather all the needed requirements to implement the Backhaul Adaptation Protocol (BAP) (Based on TS 38.340-i00 (release 18)).
|
||||
|
||||
# 2. General
|
||||
|
||||
## 2.1. Entities
|
||||
|
||||
BAP is a layer 2 routing protocol that sits on top of the RLC layer and is responsible for routing packages through multiple node hops.
|
||||
|
||||
<p>
|
||||
<img src="./images/BAP_layer_structure.png" width=600></br>
|
||||
<em>Figure 2.1-1 - BAP layer structure view (TS 38.340)</em>
|
||||
</p>
|
||||
|
||||
BAP works with entities:
|
||||
|
||||
- BAP entity at node MT;
|
||||
- BAP entity at node DU;
|
||||
- BAP entity at donor DU.
|
||||
|
||||
The transmitting part of BAP entity has a corresponding receiving part of another BAP entity.
|
||||
|
||||
<p>
|
||||
<img src="./images/BAP_layer_functional_example.png" width=600></br>
|
||||
<em>Figure 2.1-2 - Example of BAP Layer Functionality (TS 38.340)</em>
|
||||
</p>
|
||||
|
||||
## 2.2. Services
|
||||
|
||||
### 2.2.1 BAP -> upper layers
|
||||
|
||||
(Service that needs to be performed by BAP)
|
||||
|
||||
- Data transfer.
|
||||
|
||||
### 2.2.2 Lower layer (Per RLC entity) -> BAP
|
||||
|
||||
(Services expected from lower levels to BAP)
|
||||
|
||||
- Acknowledged data transfer service;
|
||||
- Unacknowledged data transfer service.
|
||||
|
||||
## 2.3. Functions
|
||||
|
||||
A BAP sublayer must support the following functions:
|
||||
|
||||
- Data transfer;
|
||||
- Determination of BAP destination and path for packets from upper layers;
|
||||
- Determination of egress BH RLC channels for packets routed to next hop;
|
||||
- Routing of packets to next hop;
|
||||
- BAP header rewriting;
|
||||
- Differentiating traffic to be delivered to upper layers from traffic to be delivered to egress link;
|
||||
- Flow control feedback and polling signalling;
|
||||
- Handling of BH RLF related indications.
|
||||
|
||||
## 2.4. Configurations
|
||||
|
||||
The configuration of the BAP entity includes:
|
||||
|
||||
- The IAB-node's BAP address(es) via RRC;
|
||||
- The IAB-donor-DU's BAP address via F1AP;
|
||||
- Mapping from next hop BAP address to downstream egress link via F1AP;
|
||||
- Mapping from next hop BAP address to upstream egress link via RRC;
|
||||
- Mapping from upper layer traffic to BAP routing ID in BAP header via F1AP and RRC;
|
||||
- The BAP routing entries via F1AP;
|
||||
- Mapping to egress BH RLC channels via F1AP and RRC;
|
||||
- Flow control feedback type(s) to be provided, if any, via RRC;
|
||||
- Inter-donor-DU re-routing enabling/disabling via F1AP.
|
||||
|
||||
Configure **RLC** channels:
|
||||
|
||||
- Via RRC on the IAB-MT;
|
||||
- via F1AP on the IAB-DU/IAB-donor-DU.
|
||||
|
||||
The **F1AP** configurations (Which derive from the original F1AP signaling) are:
|
||||
|
||||
- Uplink Traffic to Routing ID Mapping Configuration;
|
||||
- Downlink Traffic to Routing ID Mapping Configuration;
|
||||
- BH Routing Configuration;
|
||||
- BH RLC Channel Mapping Configuration;
|
||||
- Uplink Traffic to BH RLC Channel Mapping Configuration;
|
||||
- Downlink Traffic to BH RLC Channel Mapping Configuration;
|
||||
- Header Rewriting Configuration.
|
||||
|
||||
# 3. Procedures
|
||||
|
||||
## 3.1. BAP entity handling
|
||||
|
||||
### 3.1.1 Entity establishment
|
||||
|
||||
When upper layers request establishment of a BAP entity, the node shall:
|
||||
|
||||
- Establish a BAP entity;
|
||||
- Follow the other procedures in this section.
|
||||
|
||||
### 3.1.2 Entity release
|
||||
|
||||
When upper layers request release of a BAP entity, the node shall:
|
||||
|
||||
- Release the BAP entity and the related BAP configurations.
|
||||
|
||||
## 3.2 Data transfer
|
||||
|
||||
### 3.2.1 Transmitting Operations
|
||||
|
||||
#### **3.2.1.1 General**
|
||||
|
||||
Upon **receiving a BAP SDU** from upper layers, the **transmitting part** of the BAP entity shall:
|
||||
|
||||
- **(Clause ####)** Select a BAP address and a BAP path identity for this BAP SDU;
|
||||
- **(Clause ####)** Construct a BAP Data PDU by adding a BAP header to the BAP SDU, where:
|
||||
- **DESTINATION** field is set to the selected BAP address;
|
||||
- **PATH** field is set to the selected BAP path identity.
|
||||
|
||||
When the BAP entity has a **BAP Data PDU to transmit**, the **transmitting part** of the BAP entity shall:
|
||||
|
||||
- **(Clause ####)** For the boundary IAB-node, if the BAP Data PDU is received from the collocated BAP entity (in the same node), perform the BAP header rewriting operation (if configured);
|
||||
- **(Clause ####)** Perform routing to determine the egress link;
|
||||
- **(Clause ####)** Determine the egress BH RLC channel;
|
||||
- Submit this BAP Data PDU to the selected egress BH RLC channel of the selected egress link.
|
||||
|
||||
#### **3.2.1.2 BAP routing ID selection**
|
||||
|
||||
**At IAB-node**
|
||||
|
||||
At an IAB-node, for a BAP SDU received from upper layers and to be transmitted in upstream direction, the BAP entity performs mapping to a BAP address and BAP path identity based on:
|
||||
|
||||
- Uplink Traffic to Routing ID Mapping Configuration, which is derived from F1AP on the IAB-node in TS 38.473;
|
||||
|
||||
- <span style="color:#33C8FF">_defaultUL-BAP-RoutingID_</span>, which is configured by RRC on the IAB-node in TS 38.331.
|
||||
|
||||
Each entry of the Uplink Traffic to Routing ID Mapping Configuration contains:
|
||||
|
||||
- A traffic type specifier, which is indicated by <span style="color:#33C8FF">_UL UP TNL Information_</span> IE for F1-U packets and <span style="color:#33C8FF">_Non-UP TrafficType_</span> IE for non-F1-U packets in TS 38.473;
|
||||
|
||||
- A BAP routing ID, which includes a BAP address and a BAP path identity, indicated by <span style="color:#33C8FF">_BAP Routing ID_</span> IE in <span style="color:#33C8FF">_BH Information_</span> IE in TS 38.473;
|
||||
|
||||
For a BAP SDU received from upper layers and to be transmitted in upstream direction, the BAP entity shall:
|
||||
|
||||
<pre>
|
||||
<b>if</b> the Uplink Traffic to Routing ID Mapping Configuration has not
|
||||
been (re)configured by the F1AP associated with the (logical) DU, where
|
||||
this BAP SDU is received, after the last (re)configuration of
|
||||
<span style="color:#33C8FF"><i>defaultUL-BAPRoutingID</i></span> by RRC:
|
||||
<b>select</b> the BAP address and the BAP path identity as configured by
|
||||
<span style="color:#33C8FF"><i>defaultUL-BAP-RoutingID</i></span> in TS 38.331 for non-F1-U packets;
|
||||
<b>else</b>:
|
||||
<b>for the</b> BAP SDU encapsulating an F1-U packet:
|
||||
<b>select</b> an entry from the Uplink Traffic to Routing ID Mapping
|
||||
Configuration with its traffic type specifier corresponds to the
|
||||
destination IP address and TEID of this BAP SDU;
|
||||
<b>for the</b> BAP SDU encapsulating a non-F1-U packet:
|
||||
<b>select</b> an entry from the Uplink Traffic to Routing ID Mapping
|
||||
Configuration with its traffic type specifier corresponds to the
|
||||
traffic type of this BAP SDU;
|
||||
<b>select</b> the BAP address and the BAP path identity from the BAP routing ID in the entry
|
||||
selected above;
|
||||
<b>if</b> the selected entry is configured with <span style="color:#33C8FF"><i>Non-F1-terminating IAB-donor Topology
|
||||
Indicator</i></span> IE:
|
||||
<b>consider</b> this BAP Data PDU as data to be routed to non-F1-terminating
|
||||
donor topology
|
||||
</pre>
|
||||
|
||||
**At IAB-donor-DU**
|
||||
|
||||
For a BAP SDU received from upper layer at the IAB-donor-DU, the BAP entity performs mapping to a BAP address and a BAP Path identity based on:
|
||||
|
||||
- Downlink Traffic to Routing ID Mapping Configuration, which is derived from <span style="color:#33C8FF"><i>IP-to-layer-2 traffic mapping Information List</i></span> IE configured on the IAB-donor-DU in TS 38.473.
|
||||
|
||||
Each entry of the Downlink Traffic to Routing ID Mapping Configuration contains:
|
||||
|
||||
- A destination IP address, which is indicated by <span style="color:#33C8FF"><i>Destination IAB TNL Address</i></span> IE in IP header information IE, including an IPv4 address or IPv6 address or an IPv6 address prefix;
|
||||
|
||||
- An IPv6 flow label, if configured, which is indicated by <span style="color:#33C8FF"><i>IPv6 Flow Label</i></span> IE in <span style="color:#33C8FF"><i>IP header information</i></span> IE;
|
||||
|
||||
- A DSCP, if configured, which is indicated by <span style="color:#33C8FF"><i>DSCP</i></span> IE in <span style="color:#33C8FF"><i>DS Information List</i></span> IE in <span style="color:#33C8FF"><i>IP header information</i></span> IE;
|
||||
|
||||
- A BAP routing ID, which is indicated by <span style="color:#33C8FF"><i>BAP Routing ID</i></span> IE in <span style="color:#33C8FF"><i>BH Information</i></span> IE in TS 38.473.
|
||||
|
||||
For a BAP SDU received from upper layers and to be transmitted in downstream direction, the BAP entity shall:
|
||||
|
||||
<pre>
|
||||
<b>for the</b> BAP SDU encapsulating an IPv6 packet:
|
||||
<span style="color:lightgreen"># (not very relevant) Check TS 38.340</span>
|
||||
<b>for the</b> BAP SDU encapsulating an IPv4 packet:
|
||||
<b>Select</b> an entry from the Downlink Traffic to Routing ID Mapping
|
||||
Configuration which fulfils the following conditions:
|
||||
This BAP SDU Destination IP address <span style="color:orange">==</span> Destination IP address in
|
||||
this entry
|
||||
<span style="color:#BB8FCE">AND</span>
|
||||
This BAP SDU DSCP <span style="color:orange">==</span> DSCP in this entry (if configured)
|
||||
<b>select</b> the BAP address and the BAP path identity from the BAP routing ID in
|
||||
the entry selected above
|
||||
</pre>
|
||||
|
||||
#### **3.2.1.3 Routing**
|
||||
|
||||
BAP entity performs routing based on the BH Routing Configuration derived from an F1AP message, as specified in TS 38.473.
|
||||
Each entry of the BH Routing Configuration contains:
|
||||
|
||||
- <b>BAP Routing ID</b> consisting of a BAP address and a BAP path identity, which is indicated by <span style="color:#33C8FF">_BAP Routing ID_</span> IE;
|
||||
|
||||
- <b>Next Hop BAP Address</b> which is indicated by <span style="color:#33C8FF">_Next-Hop BAP Address_</span> IE;
|
||||
|
||||
- <b>Topology indicator</b>, indicating whether the entry belongs to the non-F1-terminating donor topology, which is optionally indicated by <span style="color:#33C8FF">_Non-F1-terminating IAB-donor Topology Indicator_</span> IE.
|
||||
|
||||
For a BAP Data PDU to be transmitted, BAP entity shall:
|
||||
|
||||
<pre>
|
||||
<b>if</b> the BAP Data PDU corresponds to a BAP SDU received from the upper layer
|
||||
<span style="color:#BB8FCE">AND</span>
|
||||
<b>if</b> the BH Routing Configuration has not been (re)configured by the F1AP
|
||||
associated with the (logical) DU, where this BAP SDU is received, after the
|
||||
last (re)configuration of <span style="color:#33C8FF"><i>defaultUL-BH-RLC-Channel</i></span> by RRC:
|
||||
<b>select</b> the egress link on which the egress BH RLC channel corresponding
|
||||
to <span style="color:#33C8FF"><i>defaultUL-BH-RLC-Channel</i></span> is configured as specified in TS 38.331 for
|
||||
non-F1-U packets;
|
||||
<b>else if</b> there is an entry in the BH Routing Configuration whose BAP
|
||||
address matches the DESTINATION field, whose BAP path identity is the
|
||||
same as the PATH field, and whose egress link corresponding to the Next Hop
|
||||
BAP Address is available:
|
||||
<b>select</b> the egress link corresponding to the Next Hop BAP Address
|
||||
of the entry;
|
||||
<b>else if</b> there is at least one entry in the BH Routing Configuration whose
|
||||
BAP address matches the DESTINATION field, and whose egress link corresponding
|
||||
to the Next Hop BAP Address is available:
|
||||
<b>select</b> an entry from the BH Routing Configuration whose BAP address
|
||||
is the same as the DESTINATION field, and whose egress link corresponding
|
||||
to the Next Hop BAP Address is available;
|
||||
<b>select</b> the egress link corresponding to the Next Hop BAP Address of
|
||||
the entry selected above;
|
||||
<b>else if</b>, for the transmitting part of IAB-MT, at least one egress link is
|
||||
available, and if <span style="color:#33C8FF"><i>Re-routing Enable Indicator</i></span> IE is set to true by F1AP:
|
||||
<b>if</b> this egress link belongs to F1-terminating donor topology of the
|
||||
boundary IAB-node or the transmitting part of IAB-MT is not at the
|
||||
boundary IAB-node, and there is an entry in the BH Routing Configuration
|
||||
not configured with <span style="color:#33C8FF"><i>Non-F1-terminating IAB-donor Topology Indicator</i></span> IE
|
||||
whose Next Hop BAP Address corresponds to this egress link
|
||||
<span style="color:#BB8FCE">OR</span>
|
||||
<b>if</b> this egress link belongs to non-F1-terminating donor topology, and
|
||||
there is an entry in the BH Routing Configuration configured with
|
||||
<span style="color:#33C8FF"><i>Non-F1-terminating IAB-donor Topology Indicator</i></span> IE whose Next Hop BAP
|
||||
Address corresponds to this egress link:
|
||||
<b>select</b> the egress link;
|
||||
<b>rewrite</b> the BAP header of this BAP Data PDU, where the DESTINATION
|
||||
field is set to the leftmost 10 bits of BAP Routing ID of the entry in
|
||||
the BH Routing Configuration (i.e. BAP address), and the PATH field is
|
||||
set to the rightmost 10 bits of BAP Routing ID of the entry (i.e. BAP
|
||||
path identity)
|
||||
</pre>
|
||||
|
||||
#### **3.2.1.4 Mapping to BH RLC Channel**
|
||||
|
||||
**Mapping to BH RLC Channel for BAP Data Packets from collocated BAP entity at IAB-node**
|
||||
|
||||
Check page 14 and 15
|
||||
|
||||
**Mapping to BH RLC Channel for BAP SDUs from upper layers at IAB-node**
|
||||
|
||||
Check page 15 and 16
|
||||
|
||||
**Mapping to BH RLC Channel at IAB-donor-DU**
|
||||
|
||||
Check page 16 and 17
|
||||
|
||||
#### **3.2.1.4 BAP header rewriting operation**
|
||||
|
||||
Check page 17
|
||||
|
||||
### 3.2.2 Receiving Operations
|
||||
|
||||
Upon receiving a BAP Data PDU from lower layer (i.e. ingress BH RLC channel), the receiving part of the BAP entity shall:
|
||||
|
||||
<pre>
|
||||
<b>if</b> DESTINATION field of this BAP Data PDU matches the BAP address, which
|
||||
is configured for this IAB-node by the IAB-donor providing this ingress BH RLC
|
||||
channel configuration:
|
||||
<b>remove</b> the BAP header of this BAP Data PDU and deliver the BAP SDU to
|
||||
upper layers;
|
||||
<b>else</b>:
|
||||
<b>deliver</b> the BAP Data Packet to the transmitting part of the collocated
|
||||
BAP entity.
|
||||
</pre>
|
||||
|
||||
## 3.3 Flow control
|
||||
|
||||
Check page 18
|
||||
|
||||
## 3.4 BH RLF related indications
|
||||
|
||||
Check page 19
|
||||
|
||||
## 3.5 Handling of unknown, unforeseen, and erroneous protocol data
|
||||
|
||||
When a BAP Data PDU contains a BAP address which is not included in the applied entries of BH Routing
|
||||
Configuration during Routing operation in accordance with clause 5.2.1.3 and the BAP Data PDU contains a BAP
|
||||
address which is not the BAP address of this node in accordance with clause 5.2.2 upon receiving; or
|
||||
when a BAP Control PDU that contains reserved or invalid values is received the BAP entity shall:
|
||||
|
||||
- discard the received BAP PDU.
|
||||
|
||||
# 4 Protocol data units, formats, and parameters
|
||||
|
||||
## 4.1 Protocol data units
|
||||
|
||||
### 4.1.1 Data PDU
|
||||
|
||||
Used to convey:
|
||||
|
||||
- Upper layer data.
|
||||
|
||||
### 4.1.2 Control PDU
|
||||
|
||||
Used to convey:
|
||||
|
||||
- Flow control feedbacck per BH RLC channel;
|
||||
- Flow control feedback per BAP routing ID;
|
||||
- flow control polling;
|
||||
- BH RLF related indication.
|
||||
|
||||
## 4.2 Formats and Parameters
|
||||
|
||||
Check pages 20 to 23
|
||||
123
doc/IAB_docs/IAB_Info.md
Normal file
@@ -0,0 +1,123 @@
|
||||
<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">OAI IAB Documentation</font></b>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
**Table of Contents**
|
||||
|
||||
[[_TOC_]]
|
||||
|
||||
# Glossary
|
||||
|
||||
| Acronym | Description |
|
||||
| ------- | ------------------------------ |
|
||||
| BAP | Backhaul Adaptation Protocol |
|
||||
| BH | Backhaul |
|
||||
| CP | Control Plane |
|
||||
| IAB | Integrated Access and Backhaul |
|
||||
| RLC | Radio Link Control |
|
||||
| RLF | Radio Link Failure |
|
||||
| RRC | Radio Resource Control |
|
||||
| TNL | Transport Network Layer |
|
||||
| UP | User Plane |
|
||||
|
||||
# 1. Scenario
|
||||
|
||||
This document aims to gather all the needed requirements to implement a 5G SA 3GPP compliant Integrated Access and Backhaul (IAB).
|
||||
|
||||
# 2. Protocol Stacks
|
||||
|
||||
## 2.1 Protocol stack for the support of F1-U protocol
|
||||
|
||||
<img src="./images/Protocol_stack_F1-U.png" width=600>
|
||||
|
||||
## 2.2 Protocol stack for the support of F1-C protocol
|
||||
|
||||
<img src="./images/Protocol_stack_F1-C.png" width=600>
|
||||
|
||||
## 2.3 Protocol stack for the support of IAB-MT's RRC and NAS connections
|
||||
|
||||
<img src="./images/Protocol_stack_RRC_NAS.png" width=600>
|
||||
|
||||
# 3. Backhaul Adaptation Protocol (BAP) (TS 38.340)
|
||||
|
||||
Some info in [BAP_info](./BAP_Info.md)
|
||||
|
||||
# 4. F1 Mods (TS 38.470 and 38.473)
|
||||
|
||||
Needed functions:
|
||||
|
||||
- BAP mapping configuration function;
|
||||
- gNB-DU resource configuration function;
|
||||
- IAB TNL address configuration function;
|
||||
- IAB UP configuration update function;
|
||||
- Mobile IAB F1 Setup Triggering function; (Can we skip mobile IAB for now?)
|
||||
- Mobile IAB F1 Setup Outcome Notification function. (Can we skip mobile IAB for now?)
|
||||
|
||||
# 5. RRC Mods (TS 38.331)
|
||||
|
||||
Some info in [RRC_IAB_info](./RRC_IAB_Info.md)
|
||||
|
||||
# 6. IAB-MT mandatory features (TS 38.306)
|
||||
|
||||
- Routing using BAP (TS 38.340-i00 (release 18), pages 11-17)
|
||||
- Bearer mapping using BAP (TS 38.340-i00 (release 18), pages 11-17)
|
||||
- IAB-node IP address signalling over RRC (TS 38.331-i00 (release 18), page 133)
|
||||
|
||||
<img src="./images/IAB-MT-Requirements.png" width=600>
|
||||
|
||||
# 7. IAB Resource Configuration (TS 38.300)
|
||||
|
||||
Check TS 38.300-i00 (release 18), pages 122 and 123.
|
||||
|
||||
# 8. Required signalling procedures (TS 38.300 and TS 38.401)
|
||||
|
||||
## 8.1 IAB-node Integration (TS 38.401-i00, page 87 and 88)
|
||||
|
||||
<img src="./images/IAB_node_integration.png" width=600>
|
||||
|
||||
## _8.2 IAB-node Migration (Mobile IAB???)_
|
||||
|
||||
## 8.3 Topological Management (TS 38.300-i00, page 34)
|
||||
|
||||
### 8.3.1 IAB Inter-donor-DU Re-routing (TS 38.401-i00, pages 105, 106)
|
||||
|
||||
When an IAB-donor-DU is configured to support inter-donor-DU re-routing, the IAB-donor-DU may identify a rerouted UL IP packet based on the source IP address field of the UL packet, and forwards UL IP packets, whose source IP addresses are anchored at a peer IAB-donor-DU, to this peer IAB-donor-DU via a tunnel. The IAB-donor-DU and the peer IAB-donor-DU may be controlled by the same IAB-donor-CU or by two different IAB-donor-CUs. The interdonor-DU tunnel may be a GTP-U tunnel. The configuration of the tunnel is up to implementation. At the IAB-donor-DU forwarding the UL IP packets, inter-donor-DU tunnelling may be restricted to only a subset of the IP addresses anchored at the peer IAB-donor-DU. For this purpose, the IAB-donor-CU configures the IAB-donor-DU for forwarding the UL IP packets with a list of TNL addresses and/or prefixes for which tunnelling should be permitted and TNL
|
||||
address filtering should be exempted.
|
||||
|
||||
### 8.3.2 IAB Inter-CU topological redundancy procedure (TS 38.3401-i00, pages 106, 107 and 108)
|
||||
|
||||
<img src="./images/IAB_inter-CU_redundancy.png" width=600>
|
||||
|
||||
### 8.3.3 IAB Inter-CU topology adaptation procedure (TS 38.3401-i00, pages 108 to 111)
|
||||
|
||||
<img src="./images/IAB_inter-CU_topology_adaptation.png" width=600>
|
||||
|
||||
### 8.3.4 IAB inter-CU topology adaptation procedure with descendant IAB-node (TS 38.3401-i00, pages 111 to 113)
|
||||
|
||||
<img src="./images/IAB_inter-CU_topology_adaptation_descendant.png" width=600>
|
||||
|
||||
### 8.3.5 IAB Inter-CU Backhaul RLF recovery for single connected IAB-node (TS 38.3401-i00, pages 113 to 116)
|
||||
|
||||
<img src="./images/IAB_inter-CU_BH_RLF_recovery_for_single_node.png" width=600>
|
||||
|
||||
## 8.4 OTA timing synchronization (38.300-i00, page 34)
|
||||
|
||||
An IAB-DU is subject to the same downlink timing alignment of a gNB. The IAB-DU may use the received downlink
|
||||
signal from a parent as a reference to control its downlink timing using TA in conjunction with an additional Tdelta
|
||||
parameter received by the collocated IAB-MT from the parent via MAC-CE.
|
||||
|
||||
## 8.5 Inter node discovery (38.300-i00, page 35)
|
||||
|
||||
Inter node discovery is supported via SSB-based and/or CSI-RS-based measurements. An IAB-node can be configured
|
||||
to transmit and receive off synchronization raster SSB signals to discover neighbouring IAB-nodes. The configuration
|
||||
is not expected to create a conflict between IAB-DU SSB transmission and IAB-MT SSB measurement windows.
|
||||
242
doc/IAB_docs/RRC_IAB_Info.md
Normal file
@@ -0,0 +1,242 @@
|
||||
<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">RRC - IAB related Documentation</font></b>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
**Table of Contents**
|
||||
|
||||
[[_TOC_]]
|
||||
|
||||
# Glossary
|
||||
|
||||
| Acronym | Description |
|
||||
| ------- | ------------------------------ |
|
||||
| BAP | Backhaul Adaptation Protocol |
|
||||
| BH | Backhaul |
|
||||
| DL | Downlink |
|
||||
| IAB | Integrated Access and Backhaul |
|
||||
| IE | Information Element |
|
||||
| MCG | Master Cell Group |
|
||||
| RLC | Radio Link Control |
|
||||
| RRC | Radio Resource Control |
|
||||
| SCG | Secondary Cell Group |
|
||||
| UL | Uplink |
|
||||
|
||||
# 1. Scenario
|
||||
|
||||
This document aims to gather all the needed requirements to implement IAB in the Radio Resource Control (RRC) level (TS 38.331).
|
||||
|
||||
# 2. BAP configuration
|
||||
|
||||
The IAB-MT shall:
|
||||
|
||||
<pre>
|
||||
<b>if</b> the <span style="color:#33C8FF"><i>bap_Config</i></span> is set to <span style="color:#33C8FF"><i>setup</i></span>:
|
||||
<b>if</b> no BAP entity is established:
|
||||
<b>establish</b> a BAP entity as specified in TS 38.340;
|
||||
<b>if</b> <span style="color:#33C8FF"><i>bap-Address</i></span> is included:
|
||||
<b>configure</b> the BAP entity to use the bap-Address as this
|
||||
node's BAP address;
|
||||
<b>if</b> <span style="color:#33C8FF"><i>defaultUL-BAP-RoutingID</i></span> is included:
|
||||
<b>configure</b> the BAP entity to apply the default UL BAP routing ID
|
||||
according to the configuration;
|
||||
<b>if</b> <span style="color:#33C8FF"><i>defaultUL-BH-RLC-Channel</i></span> is included:
|
||||
<b>configure</b> the BAP entity to apply the default UL BH RLC channel
|
||||
according to the configuration;
|
||||
<b>if</b> <span style="color:#33C8FF"><i>flowControlFeedbackType</i></span> is included:
|
||||
<b>configure</b> the BAP entity to apply the flow control feedback according
|
||||
to the configuration;
|
||||
<b>if</b> the <span style="color:#33C8FF"><i>bap-Config</i></span> is set to release:
|
||||
<b>release</b> the concerned <span style="color:#33C8FF"><i>bap-Config</i></span>;
|
||||
<b>if</b> there is no other configured <span style="color:#33C8FF"><i>bap-Config</i></span> for the MCG or for the SCG
|
||||
<b>release</b> the BAP entity as specified in TS 38.340.
|
||||
</pre>
|
||||
|
||||
# 3. IAB other configuration
|
||||
|
||||
## 3.1 IP address release
|
||||
|
||||
The IAB-MT shall:
|
||||
|
||||
<pre>
|
||||
<b>if</b> the release is triggered by reception of the <span style="color:#33C8FF"><i>iab-IP-AddressToReleaseList</i></span>:
|
||||
<b>for each</b> <span style="color:#33C8FF"><i>iab-IP-AddressIndex</i></span> value included in
|
||||
<span style="color:#33C8FF"><i>iab-IP-AddressToReleaseList</i></span>:
|
||||
<b>release</b> the corresponding <span style="color:#33C8FF"><i>IAB-IP-AddressConfiguration</i></span>.
|
||||
</pre>
|
||||
|
||||
## 3.2 IP address addition/modification
|
||||
|
||||
The IAB-MT shall:
|
||||
|
||||
<pre>
|
||||
<b>for each</b> <span style="color:#33C8FF"><i>iab-IP-AddressIndex</i></span> value included in the <span style="color:#33C8FF"><i>iab-IP-AddressToAddModList</i></span>
|
||||
that is not part of the current IAB-MT configuration:
|
||||
<b>add</b> the IP address indicated in <span style="color:#33C8FF"><i>iab-IP-Address</i></span>, corresponding to the
|
||||
<span style="color:#33C8FF"><i>iab-IP-AddressIndex</i></span>.
|
||||
<b>if</b> added IP address is <span style="color:#33C8FF"><i>iPv4-Address</i></span>:
|
||||
<b>if</b> <span style="color:#33C8FF"><i>iab-IP-Usage</i></span> is set to <span style="color:#33C8FF"><i>f1-C</i></span>:
|
||||
<b>store</b> the received IPv4 address for F1-C traffic together with
|
||||
the IAB-donor-DU BAP address corresponding to the
|
||||
<span style="color:#33C8FF"><i>iab-IP-AddressIndex</i></span>.
|
||||
<b>else if</b> <span style="color:#33C8FF"><i>iab-IP-Usage</i></span> is set to <span style="color:#33C8FF"><i>f1-U</i></span>:
|
||||
<b>store</b> the received IPv4 address for F1-U traffic together with
|
||||
the IAB-donor-DU BAP address corresponding to the
|
||||
<span style="color:#33C8FF"><i>iab-IP-AddressIndex</i></span>.
|
||||
<b>else if</b> <span style="color:#33C8FF"><i>iab-IP-Usage</i></span> is set to <span style="color:#33C8FF"><i>non-F1</i></span>:
|
||||
<b>store</b> the received IPv4 address for non-F1 traffic together with
|
||||
the IAB-donor-DU BAP address corresponding to the
|
||||
<span style="color:#33C8FF"><i>iab-IP-AddressIndex</i></span>.
|
||||
<b>else</b>:
|
||||
<b>store</b> the received IPv4 address for all traffic together with
|
||||
the IAB-donor-DU BAP address corresponding to the
|
||||
<span style="color:#33C8FF"><i>iab-IP-AddressIndex</i></span>.
|
||||
<b>else if</b> <span style="color:#33C8FF"><i>iPv6-Address</i></span> is included:
|
||||
<b>if</b> <span style="color:#33C8FF"><i>iab-IP-Usage</i></span> is set to <span style="color:#33C8FF"><i>f1-C</i></span>:
|
||||
<b>store</b> the received IPv6 address for F1-C traffic together with
|
||||
the IAB-donor-DU BAP address corresponding to the
|
||||
<span style="color:#33C8FF"><i>iab-IP-AddressIndex</i></span>.
|
||||
<b>else if</b> <span style="color:#33C8FF"><i>iab-IP-Usage</i></span> is set to <span style="color:#33C8FF"><i>f1-U</i></span>:
|
||||
<b>store</b> the received IPv6 address for F1-U traffic together with
|
||||
the IAB-donor-DU BAP address corresponding to the
|
||||
<span style="color:#33C8FF"><i>iab-IP-AddressIndex</i></span>.
|
||||
<b>else if</b> <span style="color:#33C8FF"><i>iab-IP-Usage</i></span> is set to <span style="color:#33C8FF"><i>non-F1</i></span>:
|
||||
<b>store</b> the received IPv6 address for non-F1 traffic together with
|
||||
the IAB-donor-DU BAP address corresponding to the
|
||||
<span style="color:#33C8FF"><i>iab-IP-AddressIndex</i></span>.
|
||||
<b>else</b>:
|
||||
<b>store</b> the received IPv6 address for all traffic together with the
|
||||
IAB-donor-DU BAP address corresponding to the
|
||||
<span style="color:#33C8FF"><i>iab-IP-AddressIndex</i></span>.
|
||||
<b>else if</b> <span style="color:#33C8FF"><i>iPv6-Prefix</i></span> is included in <span style="color:#33C8FF"><i>iab-IP-AddressToAddModList</i></span>:
|
||||
<b>if</b> <span style="color:#33C8FF"><i>iab-IP-Usage</i></span> is set to <span style="color:#33C8FF"><i>f1-C</i></span>:
|
||||
<b>store</b> the received IPv6 address prefix for F1-C traffic together
|
||||
with the IAB-donor-DU BAP address corresponding to the
|
||||
<span style="color:#33C8FF"><i>iab-IP-AddressIndex</i></span>.
|
||||
<b>else if</b> <span style="color:#33C8FF"><i>iab-IP-Usage</i></span> is set to <span style="color:#33C8FF"><i>f1-U</i></span>:
|
||||
<b>store</b> the received IPv6 address prefix for F1-U traffic together
|
||||
with the IAB-donor-DU BAP address corresponding to the
|
||||
<span style="color:#33C8FF"><i>iab-IP-AddressIndex</i></span>.
|
||||
<b>else if</b> <span style="color:#33C8FF"><i>iab-IP-Usage</i></span> is set to <span style="color:#33C8FF"><i>non-F1</i></span>:
|
||||
<b>store</b> the received IPv6 address prefix for non-F1 traffic
|
||||
together with the IAB-donor-DU BAP address corresponding to the
|
||||
<span style="color:#33C8FF"><i>iab-IP-AddressIndex</i></span>.
|
||||
<b>else</b>:
|
||||
<b>store</b> the received IPv6 address prefix for all traffic together
|
||||
with the IAB-donor-DU BAP address corresponding to the
|
||||
<span style="color:#33C8FF"><i>iab-IP-AddressIndex</i></span>.
|
||||
<b>for each</b> <span style="color:#33C8FF"><i>iab-IP-AddressIndex</i></span> value included in the <span style="color:#33C8FF"><i>iab-IP-AddressToAddModList</i></span>
|
||||
that is part of the current IA-BMT configuration:
|
||||
<b>modify</b> the IP address configuration(s) in accordance with the
|
||||
<span style="color:#33C8FF"><i>IAB-IP-AddressConfiguration</i></span> corresponding to the <span style="color:#33C8FF"><i>iab-IP-AddressIndex</i></span>.
|
||||
</pre>
|
||||
|
||||
# 4 "IAB Other Information" (Procedure)
|
||||
|
||||
<p>
|
||||
<img src="./images/IAB_other_info.png" width=600></br>
|
||||
<em>Figure 4.1 - IAB Other information procedure (TS 38.331)</em>
|
||||
</p>
|
||||
The IAB Other Information procedure is used by IAB-MT to request the IAB-donor-CU to allocate IP address or
|
||||
inform the IAB-donor-CU of the IP address for the collocated IAB-DU.
|
||||
|
||||
## 4.1 Initiation
|
||||
|
||||
Upon initiation of the procedure, the IAB-MT shall:
|
||||
|
||||
- initiate transmission of the <span style="color:#33C8FF"><i>IABOtherInformation</i></span> message.
|
||||
|
||||
## 4.2 Actions related to transmission of IABOtherInformation message
|
||||
|
||||
The IAB-MT shall set the contents of <span style="color:#33C8FF"><i>IABOtherInformation</i></span> message as follows:
|
||||
|
||||
<pre>
|
||||
<b>if</b> the procedure is used to request IP addresses:
|
||||
<b>if</b> IPv4 addresses are requested:
|
||||
<b>set</b> the <span style="color:#33C8FF"><i>iab-IPv4-AddressNumReq</i></span> to the number of IPv4 addresses
|
||||
requested per specific usage;
|
||||
<b>if</b> IPv6 addresses or IPv6 address prefixes are requested:
|
||||
<b>if</b> IPv6 addresses are requested:
|
||||
<b>set</b> the <span style="color:#33C8FF"><i>iab-IPv6-AddressNumReq</i></span> to the number of IPv6 addresses
|
||||
requested per specific usage;
|
||||
<b>else if</b> IPv6 address prefixes are requested:
|
||||
<b>set</b> the <span style="color:#33C8FF"><i>iab-IPv6-AddressPrefixReq</i></span> to <span style="color:orange"><i>true</i></span> per specific usage;
|
||||
<b>if</b> the procedure is used to report IP addresses:
|
||||
<b>if</b> IPv4 addresses are reported:
|
||||
<b>include</b> <span style="color:#33C8FF"><i>iPv4-Address</i></span> in <span style="color:#33C8FF"><i>iab-IPv4-AddressReport</i></span>, and for each IP
|
||||
address included:
|
||||
<b>if</b> IPv4 addresses are used for F1-C traffic:
|
||||
<b>include</b> these addresses in <span style="color:#33C8FF"><i>f1-C-Traffic-IP-Address</i></span>.
|
||||
<b>if</b> IPv4 addresses are used for F1-U traffic:
|
||||
<b>include</b> these addresses in <span style="color:#33C8FF"><i>f1-U-Traffic-IP-Address</i></span>.
|
||||
<b>if</b> IPv4 address are used for non-F1 traffic:
|
||||
<b>include</b> these addresses in <span style="color:#33C8FF"><i>non-f1-Traffic-IP-Address</i></span>.
|
||||
<b>if</b> IPv4 addresses are used for all traffic:
|
||||
<b>include</b> these addresses in <span style="color:#33C8FF"><i>all-Traffic-IAB-IP-Address</i></span>.
|
||||
<b>if</b> IPv6 addresses or IPv6 address prefixes are reported:
|
||||
<b>if</b> IPv6 addresses are reported:
|
||||
<b>include</b> <span style="color:#33C8FF"><i>iPv6-Address</i></span> in <span style="color:#33C8FF"><i>iab-IPv6-AddressReport</i></span>.
|
||||
<b>for each</b> IP address included (in previous step):
|
||||
<b>if</b> IPv6 addresses are used for F1-C traffic:
|
||||
<b>include</b> these addresses in <span style="color:#33C8FF"><i>f1-C-Traffic-IP-Address</i></span>.
|
||||
<b>if</b> IPv6 addresses are used for F1-U traffic:
|
||||
<b>include</b> these addresses in <span style="color:#33C8FF"><i>f1-U-Traffic-IP-Address</i></span>.
|
||||
<b>if</b> IPv6 addresses are used for non-F1 traffic:
|
||||
<b>include</b> these addresses in <span style="color:#33C8FF"><i>non-f1-Traffic-IP-Address</i></span>.
|
||||
<b>if</b> IPv6 addresses are used for all traffic:
|
||||
<b>include</b> these addresses in <span style="color:#33C8FF"><i>all-Traffic-IAB-IP-Address</i></span>.
|
||||
<b>else if</b> IPv6 address prefixes are reported:
|
||||
<b>include</b> these <span style="color:#33C8FF"><i>iPv6-Prefix</i></span> in <span style="color:#33C8FF"><i>iab-IPv6-PrefixReport</i></span>.
|
||||
<b>for each</b> IP address prefix included (in previous step):
|
||||
<b>if</b> this IPv6 address prefix is used for F1-C traffic:
|
||||
<b>include</b> this prefix in <span style="color:#33C8FF"><i>f1-C-Traffic-IP-Address</i></span>.
|
||||
<b>if</b> this IPv6 address prefix is used for F1-U traffic:
|
||||
<b>include</b> this prefix in <span style="color:#33C8FF"><i>f1-U-Traffic-IP-Address</i></span>.
|
||||
<b>if</b> this IPv6 address prefix is used for non-F1 traffic:
|
||||
<b>include</b> this prefix in <span style="color:#33C8FF"><i>non-f1-Traffic-IP-Address</i></span>.
|
||||
<b>if</b> this IPv6 address prefix is used for all traffic:
|
||||
<b>include</b> this prefix in <span style="color:#33C8FF"><i>all-Traffic-IAB-IP-Address</i></span>.
|
||||
<b>if</b> the IAB-MT is in (NG)EN-DC
|
||||
<span style="color:#BB8FCE">OR</span>
|
||||
<b>if</b> the IAB-MT is in NR-DC and the IAB Other Information procedure is
|
||||
towards the IAB-donor-CU in the SN:
|
||||
<b>if</b> SRB3 is configured:
|
||||
<b>submit</b> the <span style="color:#33C8FF"><i>IABOtherInformation</i></span> message via SRB3 to lower layers
|
||||
for transmission;
|
||||
<b>else if</b> the IAB-MT is in (NG)EN-DC:
|
||||
<b>submit</b> the <span style="color:#33C8FF"><i>IABOtherInformation</i></span> message via the E-UTRA MCG embedded
|
||||
in E-UTRA RRC message <span style="color:#33C8FF"><i>ULInformationTransferMRDC</i></span> as specified in
|
||||
TS 36.331;
|
||||
<b>else</b>:
|
||||
<b>submit</b> the <span style="color:#33C8FF"><i>IABOtherInformation</i></span> message via the NR MCG embedded
|
||||
in NR RRC message <span style="color:#33C8FF"><i>ULInformationTransferMRDC</i></span>;
|
||||
<b>else</b>:
|
||||
<b>submit</b> the <span style="color:#33C8FF"><i>IABOtherInformation</i></span> message to lower layers for transmission.
|
||||
</pre>
|
||||
|
||||
## 4.3 Message Definition _IABOtherInformation_
|
||||
|
||||
Consult pages 454 to 457 of TS 38.331-i00 (release 18 2023-12)
|
||||
|
||||
# 5 Information Elements (IE)
|
||||
|
||||
## 5.1 _IAB-IP-Adress_
|
||||
|
||||
Consult page 1292 of TS 38.331-i00 (release 18 2023-12)
|
||||
|
||||
## 5.2 _IAB-IP-AddressIndex_
|
||||
|
||||
Consult pages 1292 and 1293 of TS 38.331-i00 (release 18 2023-12)
|
||||
|
||||
## 5.3 _IAB-IP-Usage_
|
||||
|
||||
Consult page 1293 of TS 38.331-i00 (release 18 2023-12)
|
||||
BIN
doc/IAB_docs/images/BAP_layer_functional_example.png
Normal file
|
After Width: | Height: | Size: 101 KiB |
BIN
doc/IAB_docs/images/BAP_layer_structure.png
Normal file
|
After Width: | Height: | Size: 35 KiB |
BIN
doc/IAB_docs/images/IAB-MT-Requirements.png
Normal file
|
After Width: | Height: | Size: 305 KiB |
BIN
doc/IAB_docs/images/IAB_high_level.png
Normal file
|
After Width: | Height: | Size: 63 KiB |
|
After Width: | Height: | Size: 218 KiB |
BIN
doc/IAB_docs/images/IAB_inter-CU_redundancy.png
Normal file
|
After Width: | Height: | Size: 243 KiB |
BIN
doc/IAB_docs/images/IAB_inter-CU_topology_adaptation.png
Normal file
|
After Width: | Height: | Size: 223 KiB |
|
After Width: | Height: | Size: 275 KiB |
BIN
doc/IAB_docs/images/IAB_node_integration.png
Normal file
|
After Width: | Height: | Size: 60 KiB |
BIN
doc/IAB_docs/images/IAB_node_relation.png
Normal file
|
After Width: | Height: | Size: 54 KiB |
BIN
doc/IAB_docs/images/IAB_other_info.png
Normal file
|
After Width: | Height: | Size: 26 KiB |
BIN
doc/IAB_docs/images/Protocol_stack_F1-C.png
Normal file
|
After Width: | Height: | Size: 74 KiB |
BIN
doc/IAB_docs/images/Protocol_stack_F1-U.png
Normal file
|
After Width: | Height: | Size: 74 KiB |
BIN
doc/IAB_docs/images/Protocol_stack_RRC_NAS.png
Normal file
|
After Width: | Height: | Size: 44 KiB |
@@ -188,6 +188,10 @@ sudo ethtool -G enp1s0f0 tx 4096 rx 4096
|
||||
## 6.2 Real-time performance workarounds
|
||||
- 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`.
|
||||
- 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
|
||||
- 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
|
||||
## 6.2 Real-time performance workarounds
|
||||
- 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`.
|
||||
- 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
|
||||
- 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
|
||||
- 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.
|
||||
- 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://
|
||||
- [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 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 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)
|
||||
@@ -57,7 +58,7 @@ Legacy unmaintained files:
|
||||
# Designs
|
||||
|
||||
- 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 how NR nFAPI works](./NR_NFAPI_archi.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.
|
||||
Some tests are run from source (e.g.
|
||||
`ci-scripts/xml_files/gnb_phytest_usrp_run.xml`), which directly give the
|
||||
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 && \
|
||||
echo "/usr/local/lib" > /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
|
||||
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 && \
|
||||
python3-pip && \
|
||||
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
|
||||
WORKDIR /oai-ran
|
||||
COPY . .
|
||||
|
||||
@@ -46,6 +46,12 @@ RUN apt-get update && \
|
||||
python3-pip && \
|
||||
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
|
||||
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 && \
|
||||
g++-9-aarch64-linux-gnu && \
|
||||
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
|
||||
WORKDIR /oai-ran
|
||||
COPY . .
|
||||
|
||||
@@ -112,5 +112,6 @@ WORKDIR /opt/oai-enb
|
||||
# 36422 --> X2C, SCTP/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"]
|
||||
|
||||
@@ -122,5 +122,6 @@ WORKDIR /opt/oai-enb
|
||||
# 36422 --> X2C, SCTP/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"]
|
||||
|
||||
@@ -112,5 +112,6 @@ EXPOSE 2152/udp 36412/udp 36422/udp
|
||||
#EXPOSE 50000/udp # IF5 / ORI (control)
|
||||
#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"]
|
||||
|
||||
@@ -86,5 +86,6 @@ RUN ln -s /usr/local/lib/libaw2sori_transpro.so /usr/local/lib/libthirdparty_tra
|
||||
|
||||
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"]
|
||||
|
||||
@@ -95,5 +95,6 @@ RUN ln -s /usr/local/lib/libaw2sori_transpro.so /usr/local/lib/libthirdparty_tra
|
||||
|
||||
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"]
|
||||
|
||||
@@ -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
|
||||
|
||||
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"]
|
||||
|
||||
@@ -111,5 +111,6 @@ WORKDIR /opt/oai-gnb
|
||||
#EXPOSE 50000/udp # IF5 / ORI (control)
|
||||
#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"]
|
||||
|
||||
@@ -121,5 +121,6 @@ WORKDIR /opt/oai-gnb
|
||||
#EXPOSE 50000/udp # IF5 / ORI (control)
|
||||
#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"]
|
||||
|
||||
@@ -108,5 +108,6 @@ WORKDIR /opt/oai-gnb
|
||||
#EXPOSE 50000/udp # IF5 / ORI (control)
|
||||
#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"]
|
||||
|
||||